ich habe eine Befehlszeile in einer Variablen aufgebaut:
c='rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} > ${CFG_LOG}'
Die Ausf�hrung des Befehls funktioniert bestens mit eval:
eval "$c"
Vorher m�chte ich mir jedoch die komplette Befehlszeile anzeigen lassen. Das
habe ich so versucht:
echo "command: ${c}"
Dabei erhalte ich jedoch folgende Ausgabe:
command: rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} > ${CFG_LOG}
Es wird also das String-Literal ausgegeben, ohne die verwendeten Variablen
zu evaluieren.
Wie kann man denn den String mit Variablenwerten anzeigen? Oder am besten
explizit einen neuen String erzeugen, in dem die komplette Befehlszeile
steht?
Danke!
Magnus
> c='rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} > ${CFG_LOG}'
> Die Ausführung des Befehls funktioniert bestens mit eval:
>
> eval "$c"
> echo "command: ${c}"
>
> Dabei erhalte ich jedoch folgende Ausgabe:
>
> command: rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} >
> ${CFG_LOG}
>
> Es wird also das String-Literal ausgegeben, ohne die verwendeten
> Variablen zu evaluieren.
Natürlich, $c enthält ja auch diese Literale. Das ist keine
Kommandozeile, die geparst wird, sondern einfach nur Text.
Wie man daraus eine Kommandozeile macht, hast Du ja schon selber
herausgefunden. Nun musst Du sie nur noch anzeigen statt ausführen
lassen:
eval echo "$c"
Und nächstes Mal in de.comp.os.unix.shell, sonst gibt's Ärger mit
Heiko.
> Wie kann man denn den String mit Variablenwerten anzeigen? Oder am besten
> explizit einen neuen String erzeugen, in dem die komplette Befehlszeile
> steht?
eval d=\"$c\"
echo "$d"
> eval echo "$c"
Da fehlen noch Anführungszeichen:
eval echo \""$c"\"