Se eu executar um comando em segundo plano com &
, desta forma:
sleep 2 &
quando o comando termina, eu recebo "Concluído". Como posso evitar a mensagem "Concluído"?
Se eu executar um comando em segundo plano com &
, desta forma:
sleep 2 &
quando o comando termina, eu recebo "Concluído". Como posso evitar a mensagem "Concluído"?
Respostas:
Execute o shell interno:
$ set +m
Isso funciona desativando o "modo monitor" para que o shell não relate o término dos trabalhos em segundo plano.
Embora esteja executando o comando em um subshell como:
$ (sleep 2&)
... também desativará a mensagem, a única razão pela qual ela funciona é porque o modo de monitor é ativado por padrão apenas para shells interativos. Ou seja, o subshell evita a mensagem executando um shell extra que possui um "conjunto + m" automático .
Eu gostaria de esclarecer as duas respostas anteriores. Se o que você deseja é nunca ver a mensagem Concluído de nenhum comando no seu shell, set +m
é o caminho a seguir. Basta colocá-lo em seu .profile e / ou .bashrc e pronto. Observe, no entanto, que se você digitar isso:
set +m
sleep 2 &
set -m
e o sono terminar após a final set -m
, você ainda receberá a mensagem concluída.
Se você deseja desativar a mensagem para uma chamada de comando único, a técnica de subshell (sleep 2 &)
é o caminho a seguir.
Com toda a honestidade, eu só sabia set +m
, então marque +1 em Wooble por me esclarecer. No entanto, vale a pena notar que qual das duas soluções você deseja 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 nesta resposta .
jobs
não mostrará nada).