So führen Sie mehrere Befehle mit nohup aus

41

Ich muss mehrere Befehle mit ausführen nohup. Jeder Befehl sollte nach dem vorherigen Befehl ausgeführt werden.

Ich habe diesen Befehl als Beispiel verwendet:

nohup wget $url && wget $url2 > /dev/null 2>&1 &

Dieser Befehl funktionierte jedoch nicht.

Welchen Befehl soll ich für diesen Zweck verwenden?

Ehsan
quelle

Antworten:

55

Wrap es in sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &
jw013
quelle
1
Wenn ich nohup starte, bekomme ich "nohup: Eingabe ignorieren und stderr auf stdout umleiten", ist das "2> & 1" also nicht redundant?
Harschware
1
Wahrscheinlich. Ich denke, als ich die Antwort schrieb, habe ich sie einfach von der Frage kopiert.
jw013
6

Wäre es nicht viel einfacher, Ihre Befehlsliste in einer separaten Shell-Datei, z. B. command.sh, ohne Nohup zu erstellen?

Dann rufst du an:

nohup bash command.sh
assaf
quelle
4

Andere haben bereits darüber geantwortet nohup. Als praktische Randnotiz: Ich empfehle, solche Dinge innerhalb einer screenoder einer tmuxSitzung zu tun . Auf diese Weise können Sie die Verbindung trennen und später wieder herstellen, um die Ausgabe und das Endergebnis anzuzeigen.

Hör auf, Monica weiter zu schaden
quelle
1
Diese Antwort eignet sich hervorragend für interaktive Szenarien, ist jedoch für Skripte oder Automatisierung nicht sinnvoll.
Jonathan Hartley
0

Es wäre einfacher so:

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

Dies kann jedoch zu Problemen führen, wenn die URLs Sonderzeichen enthalten, sodass Sie für eine sicherere Option Folgendes verwenden können:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &
Didi Kohen
quelle
3
Der einzige sichere Weg , um Parameter zu übergeben sh -cist über getrennte Argumente, die über die Positionsparameter zugegriffen werden kann ( $0, $1, ...). Es gibt keine einfache Möglichkeit, Argumente für das Parsen von Zeichenfolgen richtig in Anführungszeichen zu setzen. Ihr Versuch, Anführungszeichen zu verwenden, schlägt fehl, wenn $urlselbst Anführungszeichen enthalten sind. Versuchen Sie es a='problem"'; sh -c "echo \"$a\""selbst und sehen Sie - Sie sollten einen Syntaxfehler erhalten, da sh -cversucht wird, auszuführen echo "problem"".
JW013
@ jw013 Aus Interesse gilt Ihr Einwand auch für die akzeptierte Antwort von -oh. Von dir. Dann vermutlich nicht. Aber ich verstehe nicht warum nicht! :-)
Jonathan Hartley
1
@ JonathanHartley Ich bin nicht sicher, ob ich Ihre Frage verstehe. Wenn Sie diese Antwort sorgfältig mit meiner vergleichen, sollten Sie einen Unterschied in der Art $urlund Weise bemerken und $url2verwendet werden.
Jw013
@ jw013 Ah, natürlich. Ich war dumm. Danke, dass du mich gerade gestellt hast.
Jonathan Hartley