Arka plan işlemine başlarken kabuk işlemi bilgileri nasıl gizlenir?


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

Bu iki mesajı nasıl / / dev / null yapabilirim ?:

[1] 5232
[1]+  Done                    sleep 3

ps: bu yüzden sürecin çıktısına ihtiyacım var, ama belirtilen iki çizgiye ihtiyacım yok!


Bu satırları yalnızca etkileşimli olarak çalıştırdığınızda alırsınız. Örneğin bir komut dosyasından çalıştırırsanız kullanamazsınız.
derobert

Yanıtlar:


24

Program çıktısı değil, bazı faydalı kabuk bilgileri.

Her neyse, bunlar alt kabuk ve çıkış yeniden yönlendirmesi kullanılarak gizlenebilir

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

2
"2> / dev / null" iyi bir şey, süreç çıktı gerekiyor
LanceBaynes

@LanceBaynes İşlem ayrıca stderr üzerine bir şeyler yazabilir.
Chris Down

2
Bu, pid'in alınmasını $ ile yenmesi talihsiz bir durumdur!
16'da

3

Bash veya zsh'de, disown %1kabuğa işi unutmasını söylemek için çağrı yapabilirsiniz . O zaman kabuk o iş hakkında herhangi bir mesaj yazdırmaz, ne de jobsbir SIGHUP çalıştırdığınızda veya ona bir SIGHUP gönderdiğinizde göstermez. Zsh'de, işi &!yerine ile başlatmak derhal &çağrılmaya eşdeğerdir disown.


1

@Gilles hakkında henüz yorum yapamıyorum ancak bash'da & disownda işe yarıyor gibi görünüyor :

sleep 3 & disown

Bash v.4.1.2
Alexej Magura

1

Deneyin:

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

Hem çıktıyı hem de PID'yi gizlediniz . PID'yi yine $ REPLY adresinden alabileceğinizi unutmayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.