Come nascondere le informazioni sul processo shell quando si avvia il processo in background?


19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

Come posso / dev / null questi due messaggi ?:

[1] 5232
[1]+  Done                    sleep 3

ps: quindi ho bisogno dell'output del processo, ma non delle due righe menzionate!


Ottieni queste righe solo quando lo esegui in modo interattivo. Non lo fai se lo esegui da uno script, per esempio.
derobert,

Risposte:


24

Non è l'output del programma, sono alcune utili informazioni sulla shell.

Ad ogni modo, quelli possono essere nascosti usando subshell e reindirizzamento dell'output

( sleep 3 & ) > /dev/null 2>&1

2
"2> / dev / null" è la cosa buona, ho bisogno dell'output del processo
LanceBaynes,

@LanceBaynes Il processo potrebbe anche scrivere qualcosa su stderr.
Chris Down,

2
È un peccato che questo sconfigge il recupero di pid con $!
Deleplace

3

In bash o zsh, puoi chiamare disown %1per dire alla shell di dimenticare il lavoro. Quindi la shell non stampa alcun messaggio su quel lavoro, né lo mostra quando lo esegui jobso non gli invii mai un SIGHUP. In zsh, iniziare il lavoro con &!invece di &equivale a chiamarlo disownimmediatamente.


1

Non posso commentare (ancora) su @Gilles ma sembra che funzioni & disownanche in bash:

sleep 3 & disown

Questo non sembra funzionare in Bash v.4.1.2
Alexej Magura,

1

Provare:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

E hai nascosto sia l' output che il PID . Si noti che è ancora possibile recuperare il PID da $ REPLY

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.