Como ocultar informações do processo shell ao iniciar o processo em segundo plano?

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

Como eu / dev / null essas duas mensagens ?:

[1] 5232
[1]+  Done                    sleep 3

ps: então eu preciso da saída do processo, mas não das duas linhas mencionadas!

LanceBaynes
fonte
Você só obtém essas linhas quando executa de forma interativa. Você não o executa a partir de um script, por exemplo.
Derobert

Respostas:

24

Não é a saída do programa, são algumas informações úteis sobre o shell.

De qualquer forma, esses podem ser ocultados usando o subshell e o redirecionamento de saída

( sleep 3 & ) > /dev/null 2>&1
ДМИТРИЙ МАЛИКОВ
fonte
2
"2> / dev / null" é a coisa boa, eu preciso da saída do processo
LanceBaynes
@LanceBaynes O processo também pode escrever algo no stderr.
Chris Baixo
2
É lamentável que isso derrote a recuperação de pid com $!
Deleplace
3

No bash ou zsh, você pode ligar disown %1para dizer ao shell para esquecer o trabalho. O shell não imprimirá nenhuma mensagem sobre esse trabalho, nem o exibirá quando você executar jobsou enviar um SIGHUP para ele. No zsh, iniciar o trabalho com, em &!vez de, &é equivalente a chamá disown-lo imediatamente.

Gilles 'SO- parar de ser mau'
fonte
1

Não é possível comentar (ainda) no @Gilles, mas parece que & disowntambém funciona no bash:

sleep 3 & disown
dubberx
fonte
Isso não parece funcionar no Bash v.4.1.2
Alexej Magura
1

Experimentar:

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

E você ocultou a saída e o PID . Observe que você ainda pode recuperar o PID de $ REPLY

mark_infinite
fonte