Comment masquer les informations du processus shell lors du démarrage du processus en arrière-plan?

19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

Comment puis-je / dev / null ces deux messages?:

[1] 5232
[1]+  Done                    sleep 3

ps: j'ai donc besoin de la sortie du processus, mais pas des deux lignes mentionnées!

LanceBaynes
la source
Vous obtenez ces lignes uniquement lorsque vous l'exécutez de manière interactive. Vous ne le faites pas si vous l'exécutez à partir d'un script, par exemple.
derobert

Réponses:

24

Ce n'est pas la sortie du programme, ce sont des informations utiles sur le shell.

Quoi qu'il en soit, ceux-ci peuvent être masqués en utilisant la redirection de sous-coque et de sortie

( sleep 3 & ) > /dev/null 2>&1
ДМИТРИЙ МАЛИКОВ
la source
2
"2> / dev / null" est la bonne chose, j'ai besoin de la sortie du processus
LanceBaynes
@LanceBaynes Le processus pourrait également écrire quelque chose sur stderr.
Chris Down
2
Il est regrettable que cela vainc la récupération de pid avec $!
Deleplace
3

En bash ou zsh, vous pouvez appeler disown %1pour dire au shell d'oublier le travail. Ensuite, le shell n'imprimera aucun message sur ce travail, ni ne l'affichera lorsque vous l'exécuterez jobsou lui enverrez un SIGHUP. Dans zsh, démarrer le travail avec &!au lieu de &revient à l'appeler disownimmédiatement.

Gilles 'SO- arrête d'être méchant'
la source
1

Je ne peux pas (encore) commenter @Gilles mais il semble que cela & disownfonctionne aussi en bash:

sleep 3 & disown
Dubberx
la source
Cela ne semble pas fonctionner dans Bash v.4.1.2
Alexej Magura
1

Essayer:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

Et vous avez masqué à la fois la sortie et le PID . Notez que vous pouvez toujours récupérer le PID à partir de $ REPLY

mark_infinite
la source