web-dev-qa-db-fra.com

Comment exécuter un script Shell en arrière-plan sans obtenir de sortie

J'ai écrit deux scripts Shell a.sh et b.sh. Dans a.sh et b.sh, j'ai une boucle infinie et ils impriment une sortie vers le terminal. Je veux écrire un autre script qui appelle a.sh et b.sh, mais je veux que l'utilisateur reprenne le contrôle du terminal immédiatement, au lieu que le script s'exécute à l'infini et que je souhaite masquer la sortie dans le terminal.

87
Behnam Safari

Utilisez Nohup si votre travail en arrière-plan prend beaucoup de temps ou si vous utilisez simplement SecureCRT ou un logiciel similaire pour vous connecter au serveur. 

Redirige les stdout et stderr vers /dev/null pour ignorer la sortie.

Nohup /path/to/your/script.sh > /dev/null 2>&1 &
184
George

Rediriger la sortie vers un fichier comme celui-ci:

./a.sh > somefile 2>&1 &

Cela redirigera stdout et stderr vers le même fichier. Si vous voulez rediriger stdout et stderr vers deux fichiers différents, utilisez ceci:

./a.sh > stdoutfile 2> stderrfile &

Vous pouvez utiliser /dev/null comme un ou les deux fichiers si vous ne vous souciez pas de stdout et/ou de stderr. 

Voir bash manpage pour plus de détails sur les redirections.

27
Adam Zalcman

Désolé, c'est un peu tard mais nous avons trouvé la solution idéale pour les commandes somple où vous ne voulez pas de sortie standard ou d'erreur (le crédit est dû: http://felixmilea.com/2014/12/running-bash-commands -background-correctement/ )

Ceci redirige la sortie vers null et garde l'écran clair:

command &>/dev/null &
17
DanteAlighieri

S'ils se trouvent dans le même répertoire que votre script, il contient:

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

Le & à la fin est ce qui rend votre script exécuté en arrière-plan.

La partie > /dev/null 2>&1 n'est pas nécessaire - elle redirige les flux stdout et stderr afin que vous n'ayez pas à les voir sur le terminal, ce que vous voudrez peut-être faire pour les scripts bruyants avec beaucoup de sorties.

12
Michael Chinen

Exécuter dans un sous-shell pour supprimer les notifications et fermer STDOUT et STDERR:

(&>/dev/null script.sh &)
1
Tom Hale

Ces exemples fonctionnent bien:

Nohup sh prog.sh proglog.log 2> & 1 &

Pour la boucle, vous pouvez utiliser comme ceci:

pour i dans {1..10}; ne sh prog.sh; dormir 1; done prog.log 2> & 1 &

Cela fonctionne en arrière-plan et ne montre aucune sortie.

0
Ramin Ismayilli
Nohup sh -x runShellScripts.sh &
0
vaquar khan

Si vous voulez exécuter le script dans un Kickstart Linux, vous devez exécuter la procédure ci-dessous.

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &
0
SARATH CHANDRAN