Ocultar todas as saídas de um processo em segundo plano

Ocultar todas as saídas de um processo em segundo plano

Eu tenho vários comandos zshrcque invocam outro comando em segundo plano. O comando background é um alias para um programa de conversão de texto em fala (eu o uso para fornecer dicas de áudio quando processos como suítes de testes e patches terminam).

Atualmente é invocado assim:

alert "Message for this current task" &

Bem simples.

No entanto, quando uso esse formato, recebo esta saída:

$ alert "Foobar" &
[1] 85072
$
[1]  + done       alert "Foobar"
$

Quero suprimir a saída do pid e da donemensagem. Como faço isso?

Eu tentei alert "Foobar" > /dev/null &, mas isso apenas canaliza a saída do alerta para devnull.

Eu tentei alert "Foobar" & > /dev/null, mas isso causou coisas ruins inesperadas que não entendo completamente.

Como faço para usar &no modo 'silencioso'?

Responder1

Você pode usar um subshell para se livrar das mensagens de controle de trabalho:

$ alias alertme="xmessage Alert!"
$ ( alertme & )
$

Se o seu comando também produzir alguma saída para STDOUT e/ou STDERR, canalize-os para /dev/null:

$ ( alertme > /dev/null 2>&1 & )

Responder2

Uma versão um pouco mais organizada de outra resposta aqui:

(&>/dev/null alertme &)

informação relacionada