2014-11-13 10 views

Antwort

35

Nein hören, müssen Sie die nohup auf die Befehle separat hinzuzufügen.

Etwas Ähnliches wird empfohlen:

nohup sh -c "cmd1 | cmd2" & 

Oder alternativ:

nohup $SHELL <<EOF & 
cmd1 | cmd2 
EOF 
+0

kann jemand bitte erklären, was '$ SHELL' ist und warum wir es brauchen? –

+1

Die '$ SHELL' enthält Ihre aktuell laufende Shell, auf den meisten Linux Systemen wird dies'/bin/bash' sein, aber es könnte '/ usr/bin/zsh' oder etwas anderes sein. Der Vorteil der Verwendung der Variable $ SHELL besteht darin, dass der Befehl auf diese Weise mit den regulären Shell-Einstellungen ausgeführt wird. – Wolph

+0

'EOF &' funktioniert nicht für mich. – RoVo

0
nohup cmd1 | cmd2 & 

Nein, ich habe gerade überprüft das ist der als

nohup: ignoring input and redirecting stderr to stdout 
+0

Die Verbindung ist tot. –

+0

@ JasmineLognnes Link enthalten die gleiche Fehlermeldung, die zusammen mit meiner Antwort gepostet. – Skynet

7

Wie folgt eine Alternative zu nohup, empfehle ich

(cmd1 | cmd2) > logfile < /dev/null 2>&1 & 

Durch Umleitung stdin, stdout und sterr vom Terminal erreicht dies den gleichen Effekt wie nohup mit einer Syntax, die ich zumindest bevorzugen.

+8

Das schützt den Befehl nicht vor dem HUP-Signal wie 'nohup'. Du brauchst '(trap" "HUP; cmd1 | cmd2) logfile 2> & 1 &' um das zu tun. –

+1

Richtig, aber wie geschrieben, verhindert es, dass das schließende Terminal das HUP an den Prozess sendet. –

Verwandte Themen