Evitando que o bash exiba “Concluído” quando um comando em segundo plano termina de executar

25

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

    
por juanpablo 04.07.2011 / 05:25

4 respostas

26

Execute o comando em um subshell:

(sleep 2 &)
    
por 04.07.2011 / 05:33
28

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.

    
por 04.07.2011 / 05:33
7

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.

    
por 04.07.2011 / 05:42
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 em esta resposta .

    
por 27.06.2018 / 13:04

Tags