2014-11-13 12 views

risposta

35

No, è necessario aggiungere il nohup ai comandi separatamente. Si raccomanda

Qualcosa di simile a questo:

nohup sh -c "cmd1 | cmd2" & 

O in alternativa:

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

qualcuno può spiegare cosa è '$ SHELL' e perché ne abbiamo bisogno? –

+1

'$ SHELL' contiene la shell attualmente in esecuzione, nella maggior parte dei sistemi Linux questa sarà'/bin/bash' ma potrebbe essere '/ usr/bin/zsh' o qualcos'altro. Il vantaggio dell'uso della variabile '$ SHELL' è che in questo modo il comando verrà eseguito usando le normali impostazioni della shell. – Wolph

+0

'EOF &' non funziona per me. – RoVo

0
nohup cmd1 | cmd2 & 

No, ho controllato proprio ora questo è il modo seguente

nohup: ignoring input and redirecting stderr to stdout 
+0

Il link è morto. Il collegamento –

+0

@JasmineLognnes contiene lo stesso messaggio di errore pubblicato insieme alla mia risposta. – Skynet

7

Come un'alternativa a nohup, consiglio

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

Per reinstradamento stdin, stdout, e sterr dal terminale, questo raggiunge lo stesso effetto come nohup con una sintassi che, almeno, preferiscono.

+8

Ciò non protegge il comando dal segnale HUP come "nohup". Avresti bisogno di '(trap" "HUP; cmd1 | cmd2) logfile 2> & 1 &' per farlo. –

+1

Vero, ma come scritto, impedisce al terminale di chiusura di inviare l'HUP al processo in primo luogo. –