Comment exécuter plusieurs commandes en utilisant nohup

41

J'ai besoin d'exécuter plusieurs commandes en utilisant nohup. Chaque commande doit être exécutée après la commande précédente.

J'ai utilisé cette commande comme exemple:

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

Cependant, cette commande n'a pas fonctionné.

Quelle commande devrais-je utiliser à cette fin?

Ehsan
la source

Réponses:

56

Enveloppez-le dans sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &
jw013
la source
1
Quand je lance nohup, j'obtiens "nohup: ignorer l'entrée et rediriger stderr vers stdout". Le "2> & 1" n'est-il donc pas redondant?
harschware
1
Probablement. Je pense que lorsque j'ai écrit la réponse, je l'ai simplement copiée à partir de la question.
jw013
6

Ne serait-il pas beaucoup plus simple de créer votre liste de commandes dans un fichier shell séparé, par exemple command.sh, sans nohup.

Ensuite, vous appelez:

nohup bash command.sh
assaf
la source
4

D'autres ont déjà répondu à propos de nohup. Note pratique: je recommande de faire ce genre de chose dans une session screenou tmux. De cette façon, vous pouvez vous déconnecter, puis vous reconnecter plus tard et voir la sortie et le résultat final.

Arrêtez le mal en cours à Monica
la source
1
Cette réponse est idéale pour les scénarios interactifs, mais n’a aucun sens pour les scripts ou l’automatisation.
Jonathan Hartley
0

Ce serait plus simple comme ça:

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

Cela peut toutefois poser problème si les URL contiennent des caractères spéciaux. Pour une option plus sûre, vous pouvez utiliser:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &
Didi Kohen
la source
3
La façon de ne laisser passer que la sécurité des paramètres à sh -cfait par des arguments distincts, qui peuvent être accessibles via les paramètres de position ( $0, $1, ...). Il n’existe pas de moyen simple ni facile de citer des arguments correctement pour l’analyse de chaînes. Votre tentative d'utilisation de guillemets doubles échappés échoue si $urlelle - même contient des guillemets doubles. Essayez a='problem"'; sh -c "echo \"$a\""vous-même et voyez - vous devriez avoir une erreur de syntaxe parce que vous essayez sh -cde courir echo "problem"".
jw013
@ jw013 Par opposition, votre objection s'applique-t-elle également à la réponse acceptée par -oh. Par toi. Probablement pas, alors. Mais je ne comprends pas pourquoi pas! :-)
Jonathan Hartley
1
@ JonathanHartley Je ne suis pas sûr de comprendre votre question. Si vous comparez cette réponse à la mienne avec soin, vous devriez remarquer une différence dans la manière $urlet $url2sont utilisés.
jw013
@ jw013 Ah, bien sûr. J'étais bête. Merci de me mettre au clair.
Jonathan Hartley