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.
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 &
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.
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 &
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.
Exécuter dans un sous-shell pour supprimer les notifications et fermer STDOUT et STDERR:
(&>/dev/null script.sh &)
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.
Nohup sh -x runShellScripts.sh &
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 &