Execute o comando em um subshell:
(sleep 2 &)
Se eu executar um comando em segundo plano com &
, assim:
sleep 2 &
quando o comando terminar, eu recebo "Concluído". Como posso evitar ver a mensagem "Concluído"?
Execute o shell incorporado:
$ set +m
Isso funciona desativando o "monitor mode" para que o shell não relate a finalização de jobs em segundo plano.
Apesar de executar o comando em um subshell como:
$ (sleep 2&)
... irá também desabilitar a mensagem, a única razão para isso funcionar é porque o modo monitor está ativado por padrão apenas para shells interativos. Ou seja, o subshell evita a mensagem executando um shell extra que possui um "set + m" automático.
Eu gostaria de esclarecer as duas respostas anteriores. Se o que você quer é nunca ver a mensagem Done de nenhum comando no seu shell, set +m
é o caminho a percorrer. Basta colocá-lo em seu .profile e / ou .bashrc e pronto. Note, no entanto, que se você digitar isto:
set +m
sleep 2 &
set -m
e o sono termina após o final set -m
, você ainda receberá a mensagem concluída.
Se você quiser desabilitar a mensagem para uma única chamada de comando, a técnica de subshell (sleep 2 &)
é o caminho a seguir.
Com toda a honestidade, eu só sabia sobre set +m
, então +1 para Wooble por me esclarecer. No entanto, vale a pena observar que das duas soluções que você quer depende do que você está tentando fazer.
Sem um subshell , você pode fazer o seguinte:
silent_background() {
{ 2>&3 "$@"& } 3>&2 2>-
disown &>/dev/null # Close STD{OUT,ERR} for silence if job has already completed
}
silent_background sleep 5
Com base em esta resposta .
Tags bash