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!


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

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.


1

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

sleep 3 & disown

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.