Impedindo que o bash exiba "Concluído" quando um comando em segundo plano concluir a execução

34

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"?

Juan Pablo
fonte

Respostas:

34

Execute o comando em um subshell:

(sleep 2 &)
Wooble
fonte
observe que, usando isso, você perde o controle dos trabalhos dentro do shell do chamador ( jobsnão mostrará nada).
Mcq #
36

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 .

DigitalRoss
fonte
4
Deve-se notar que essa saída não é realizada pelo sono. É o shell bash que apenas informa sobre o trabalho em segundo plano concluído.
Fl4
8

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.

andrewdski
fonte
0

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 .

Tom Hale
fonte