2012-03-26 11 views
1

Im Wesentlichen habe ich ein Skript, das als eine Task-Wrapper und E-Mails einen Benutzer, wenn die Aufgabe fehlschlägt.Bash Exec Wrapper-Skript - mehrere Befehle als Argumente übergeben

Die Aufgabe wird als Argument an das Skript übergeben. Das Problem tritt auf, wenn wir mehrere Befehle ausführen müssen, sagen wir, dass die folgende Zeile an das Skript übergeben wird, da die Aufgabe "echo this; echo that"ausgeben würde; echo das.

Also die Frage ist, was ist die einfachste Möglichkeit, mehrere Befehle auszuführen, ohne die Eingabe Befehlszeichenfolge durchlaufen und auf die ";" verkohlen?

Einfaches Beispiel:

FIRST=$1 
TASK=$* 
echo run 
echo "emailing $FIRST" 
$TASK 
echo done 

und dieses Skript laufen wir ./wrapper.sh "[email protected]" "echo this; echo that"

Vorschläge verwenden würde?

Antwort

3

Wenn Sie die Zeichenfolge $TASK über sh -c ausführen, können Sie nicht mehr Arbeit zu tun:

$ sh -c "echo this ; echo that" 
this 
that 
$ 
+0

Dank - ist es trotzdem, den Rückgabewert zu erhalten, wenn jeder Befehl in der Befehlszeichenfolge nicht. Sagen Sie "echo this; dsddsdsd; echo das", der mittlere Befehl wird fehlschlagen (nicht gefunden), aber $? wird immer noch 0 sein, wenn das Echo erfolgreich ist. Die Frage ist also, ob ich bei einem Fehler mit der Option -e anhalten kann, aber ich kann jeden Befehl ausführen, um Fehler ungleich Null zurückzugeben (ich rate nein, aber einen Versuch wert). – NightWolf

+1

Hrm, ich kann mir keinen einfachen Mechanismus vorstellen, um das zu tun; Können Sie stattdessen Ihr Skript so ändern, dass mehrere Befehle als mehrere Argumente akzeptiert werden? z.B. 'wrapper.sh alert @ hostname" echo dies "" echo das "'? – sarnold

Verwandte Themen