[linux-l] Bash-Frage

Steffen Dettmer steffen at dett.de
Sa Okt 12 16:38:06 CEST 2002


* Lutz Meinert wrote on Sat, Oct 12, 2002 at 09:19 +0200:
> Cleverer ist es, die Bildschirmmeldungen für die jeweilige Sprache als
> einzelne Text-Files in seperaten Verzeichnissen zu halten. Der Pfad zum
> jeweiligen "Sprach-Verzeichnis" erfolgt über eine Variable, die wiederum
> über das Auslesen von $LANG definiert wird.

Also sowas wie

source lang/default/messages
test -r lang/$LANG/messages && source lang/$LANG/messages

ja?

> Dazu muss ich aber den Bash-Scripten eben diese erwähnten Text-Files
> übergeben.
> Darin stehen aber auch einige Variablen,

Da steht dann drin:
HELLOMESSAGE="Hallo, das ist eine Testmeldung in Deutsch"
OTHERMESSAGE="Noch ein Text"

usw oder wie?

> z.B. für die Wahl der Partition, des Mount-Verzeichnisses oder
> Mount-Aliases. Diese kann ich nicht vorher wissen

Wie jetzt? Du meinst:

PART_YESNO="Wollen Sie wirklich die Partition /dev/hda verwenden?"

mit dynamischem /dev/hda? Dann entweder printf:

PART_YESNO="Wollen Sie wirklich die Partition %s verwenden?"

und im bash script dann 
printf "$PART_YESNO", "$selected_partition";

oder auch
PART_YESNO='Wollen Sie wirklich $selected_partition verwenden?'
und
echo `eval echo $PART_YESNO`

Würde aber die Printf-Version vorziehen.

> # Beispiel 1 (alt, redundant, dumm):
> # dialog --clear --title "CORP" --msgbox \
> "Sie sind als \"$LOGNAME\" angemedelt" 25 80
> 
> # Beispiel 2 (neu, nicht redundant, eigentlich clever, aber Variablen 
> # vom Text-File werden nicht aufgelöst
> dialog --clear --title "CORP" --msgbox "$(cat $gvMsgDir/login)" 25 80

Du kannst machen:
A=`eval echo cat $gvMsgDir/login`;
dialog  --msgbox "$A";
(bißchen lesbarer als alles inline).

Oder mit Freund printf:
A=`printf "$LOGGED_AS_MSG", "$LOGNAME"`

mit
LOGGED_AS_MSG="Sie sind als %s angemedelt";

Finde ich einfach besser lesbar und verständlicher. $LOGNAME ist
natürlich ein blödes Beispiel, weil der ändert sich ja nicht,
damit reicht hier ja ein 
LOGGED_AS_MSG="Sie sind als $LOGNAME angemedelt";
ganz ohne Printf (weil $LOGNAME ist ja beim Start so korrekt
gesetzt).

Das printf in backticks ist natürlich lahm (wie dialog auch),
weil man sinnlos oft forken muß. Da kann man auch in Erwägung
ziehen:

LOGGED_AS_MSG='Sie sind als _LOGNAME_ angemedelt';
dialog  --msgbox "${LOGGED_AS_MSG//_LOGNAME_/$LOGNAME}"

Nicht mehr lesbar, aber schnell (hier wird _LOGNAME_ als token
subsituiert). Jedenfalls hilfreich, wenn man sehr viele evals
oder $(cat) oder solche Bremsen hat. Bei 10 lohnt sich das nicht,
klar, kann man gut printf nehmen, aber bei 100 wohl kaum noch.
 
> Vielleicht hat da ja eine(r) einen guten Tip...

Reicht erstmal ;) ?

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.




Mehr Informationen über die Mailingliste linux-l