PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash: Wie Kommandozeile mal als Variable und mal ausgeführt?



nobody0
20-02-2006, 20:23
In einem Bash-Skript brauche ich eine Kommandozeile einige male, also beispielsweise ein Kommando ausgeführt und danach das selbe Kommando mittels pkill gekillt:

...
foo $OPTIONS $ARG
sleep 0.1
# Terminate foo if it is still working.
pkill -U $UID -f "foo $OPTIONS $ARG"
...

Irgendwie hatte sich nämlich das Programm (konkret wget) manchmal in den Hintergrund verabschiedet, so dass es mit pkill gekillt werden musste.
Wenn ich aber

...
COMMAND_LINE="foo $OPTIONS $ARG"
for ARG in $ARGS ; do
$COMMAND_LINE
pkill -U $UID -f "$COMMAND_LINE"
done
...

versuche, dann funktioniert die Substituion nicht wie gewünscht; es wird schon in der Zeile mit COMMAND_LINE= substituiert und nicht beim $COMMAND_LINE. Mit "'" statt """ funktioniert es auch nicht.
Wie bekomme ich die Substitution so hin, dass sie nur nach der Zeile mit COMMAND_LINE= vorgenommen wird? :confused:

rais
20-02-2006, 22:54
Moin moin,

COMMAND_LINE="foo $OPTIONS $ARG"
for ARG in $ARGS ; do
$COMMAND_LINE
pkill -U $UID -f "$COMMAND_LINE"
done
...

Ähh, tut's nicht ein

COMMAND_LINE="foo $OPTIONS"
for ARG in $ARGS ; do
$COMMAND_LINE $ARG
pkill -U $UID -f "$COMMAND_LINE $ARG"
done schon?
MfG,

nobody0
20-02-2006, 23:45
Danke; das funktioniert halbwegs, denn mit

nice -19 "$COMMAND_LINE $ARG"

meldet nice:

nice: ... : No such file or directory

aber ohne doppelte Anführungsstriche funktioniert es!
Anscheinend eine Eigenwilligkeit von nice, denn mit echo sehe ich keinen Unterschied zwischen der Version mit und ohne doppelte Anführungsstriche.