149 votes

Comment exécuter une commande en arrière-plan et n'obtenir aucune sortie ?

J'ai écrit deux scripts shell a.sh et b.sh . Dans a.sh et b.sh j'ai une boucle for infinie et ils impriment une sortie sur le terminal. Je veux écrire un autre script qui appelle à la fois a.sh et b.sh mais je veux que l'utilisateur reprenne immédiatement le contrôle du terminal, au lieu de laisser le script s'exécuter à l'infini et je veux cacher le sortie dans le terminal.

275voto

George Points 869

Utilisez nohup si votre tâche d'arrière-plan prend beaucoup de temps ou si vous utilisez simplement SecureCRT ou quelque chose comme cela pour vous connecter au serveur.

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

 nohup /path/to/your/script.sh > /dev/null 2>&1 &

42voto

Adam Zalcman Points 13198

Redirigez la sortie vers un fichier comme celui-ci :

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

Cela redirigera à la fois stdout et stderr vers le même fichier. Si vous souhaitez 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 du stdout et/ou du stderr.

Voir la page de manuel bash pour plus de détails sur les redirections.

32voto

DanteAlighieri Points 411

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

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

 command &>/dev/null &

25voto

Tom Hale Points 5950

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

 (&>/dev/null script.sh &)

18voto

Michael Chinen Points 3346

S'ils sont dans le même répertoire que votre script qui contient :

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

Le & à la fin est ce qui fait que votre script s'exécute 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 sortie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X