Come eseguire comandi multipli usando nohup


41

Ho bisogno di eseguire più comandi utilizzando nohup. Ogni comando deve essere eseguito dopo il comando precedente.

Ho usato questo comando come esempio:

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

Tuttavia quel comando non ha funzionato.

Quale comando dovrei usare per questo scopo?

Risposte:


56

Avvolgilo in sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

1
quando lancio nohup ricevo "nohup: ignorando l'input e reindirizzando stderr a stdout", quindi "2> & 1" non è ridondante?
harschware,

1
Probabilmente. Penso che quando ho scritto la risposta l'ho appena copiata dalla domanda.
jw013,

6

Non sarebbe molto più semplice creare il tuo elenco di comandi in un file di shell separato, ad esempio command.sh, senza nessun nohup.

Quindi chiami:

nohup bash command.sh

4

Altri hanno già risposto nohup. Come nota a margine pratica: consiglio di fare questo genere di cose in una screeno una tmuxsessione. In questo modo è possibile disconnettersi, quindi riconnettersi in seguito e vedere l'output e il risultato finale.


1
Questa risposta è ottima per gli scenari interattivi, ma non ha senso per gli script o l'automazione.
Jonathan Hartley,

0

Sarebbe più semplice così:

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

Ciò tuttavia può causare problemi se gli URL contengono caratteri speciali, quindi per un'opzione più sicura è possibile utilizzare:

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

3
L'unico modo sicuro per passare parametri sh -cè tramite argomenti separati, che possono essere accessibili dai parametri posizionali ( $0, $1, ...). Non esiste un modo semplice o semplice per citare correttamente gli argomenti per l'analisi delle stringhe. Il tentativo di utilizzare virgolette doppie con escape ha esito negativo se esso $urlstesso contiene virgolette doppie. Mettiti alla prova a='problem"'; sh -c "echo \"$a\""e vedi - dovresti ricevere un errore di sintassi perché sh -cprova a funzionare echo "problem"".
jw013,

@ jw013 Per interesse, la tua obiezione si applica ugualmente alla risposta accettata da -oh. Da te. Presumibilmente no, quindi. Ma non capisco perché no! :-)
Jonathan Hartley,

1
@JonathanHartley Non sono sicuro di aver capito la tua domanda. Se si confronta questa risposta alla mia attenzione si dovrebbe notare una differenza nel modo $urle $url2sono utilizzati.
jw013,

@ jw013 Ah, certo. Ero sciocco. Grazie per avermi chiarito.
Jonathan Hartley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.