2012-05-03 13 views
8

Terminali açtığımda sahip olduğum yeni mesajların sayısını yazdırmak için .bashrc'de bir komut dosyası arıyorum. ağ ve bazen birkaç saniye sürüyor, yani terminali tamamlanana kadar kullanamam.bash "&" yazdırılmadan "[1] + Bitti"

ben koymak Ancak eğer: my bashrc içinde

mailcheck & 

, iyi çalışıyor. ama sonra boş bir satır basılır ve enter tuşuna zaman var ve

[1]+ Done     ~/bin/mailcheck 

Bu çok dağınık bu etrafında bir yol yoktur yazdırır? Birkaç dakika Düşünüyorum

mailcheck & 2>/dev/null 

null/dev

+0

Ne anlaşılır bir soru! +1 –

cevap

9

, bu bash işi kontrol anlatışımdan var:

(exec mailcheck &) 
+0

Neden sadece mailcheck & disown' değil? –

2

deneyin boru stderr /, başka bir yol yazma kullanmak olabilir.
Arka plan görevinin çıktısını kendinize aktarın, bu sayede istediğiniz zaman tamamlayabilirsiniz ve stdoutun yanı sıra stkutta ek çıktıları da ekleyebilirsiniz.

mailcheck | write $(whoami) & > /dev/null 
+0

Üzgünüm, bunu denediğimi söylemeliydim, bir hata olmamasından dolayı stderr –

+0

stderr olmamalı. arka planda çalıştığı için, sürecin başarıyla tamamlandığını bilmenizi sağlar. belki stdout? –

+0

Bu iyi değil, ben bunu anlamıyorum, eğer stdout ya da stderr değilse? –

3

Böyle Senaryonu arayabilirsiniz: O mesaj MailCheck gelmiyor

(mailcheck &) 
+0

hala iyi alıyorum: [1] + Done exec ~/bin/mailcheck –

+0

Benim testlerde iyi çalışıyor. .bashrc'de bir komut çağrısı eklediğimde, bir dahaki sefere oturum açtığımda herhangi bir "Bitti" mesajı alamıyorum. – anubhava

+0

Evet özür dilerim, doğru köşeli parantezleri kaçırdım –

4

Bu iş gibi görünüyor arka plandaki işiniz hakkında. Bundan kaçınmanın yolu, bash'ın iş kontrolü tarafından yönetilmesini istemediğini söylemektir:

mailcheck & 
disown $! 
+0

'a ihtiyacınız yok Yeniden yönlendirme olmadan çalışıyor gibi görünüyor. –

+0

@Dennis: iyi benekli - Yönlendirmeyi çıkaracağım. –