2011-12-08 21 views
11

Sıklıkla çatalımak istediğim ve çıktısını göz ardı etmek istediğim bir kabuktan (Bash durumunda) komutları yürütüyorum. Yani sıkça aslında benim yarattığım bir komut dosyası (silent) bunu yapmak için:Sadece bir komutun çıktısını/dev/null değerine çevirmek ve yönlendirmek

#!/bin/bash 
[email protected] &> /dev/null & 

Sonra çalışabilir, örneğin ve terminalim, çatal attığım işlemin hata ayıklama çıktısı tarafından kirlenmeyecektir.

iki soru var:

  1. Bunu yapmanın bir "resmi" yolu ?, var mı yani &> /dev/null & daha kısa ama eşdeğer bir şey?

  2. Değilse, silent komutumdan sonra sekme tamamlama işini yapabilmem mümkün mü? Örnek vermek gerekirse, silent inksc yazdıktan sonra, [tab] tuşlarına bastığımda komutumu otomatik olarak tamamla komutunu silent inkscape olarak tamamladım.

+0

'Orada yokmuş gibi' yazdınız. Üzgünüm, 'o' nedir? Belki de açıklamak için yayınınızı düzenleyebilirsiniz. İyi şanslar. – shellter

+0

Bu, bash'ın argümanlara normal bir komut olarak "sessiz" olarak davranmasını, bu komut için normal sekmenin tamamlanmasını sağlamanız anlamına gelir. 'Sessiz git pus [TAB] '' sessiz git basma' 'için tamamlandı. –

+1

İkinci soruyu açıklığa kavuşturdum, sorduğun için teşekkürler. Git örneği belki de daha iyidir, çünkü bu durumda git tamamlama profilini kullanmak için bash'ı tercih ediyorum. – Philippe

cevap

4

yanı: exec "[email protected]" &> /dev/null & adresinden silent komut dosyasına gitmek istiyorsanız, alt kabuğu yok etmesine neden olacak ve "[email protected]" alanından alıntılar boşlukların yoldan çıkmasını engelleyecektir.

# 2'ye gelince: complete -F _command silent, istediğiniz gibi bir şey yapmalıdır. (O senaryo launch benim sürümünü çağırır ve benim .bash_profile içinde complete -F launch var)

0

Belki de sekme anahtarını 'yeniden' yapabilirseniz? Enter tuşu ile superuser Stackoverflow üzerinde bir example gösterilir. Bu doğru fikir mi?

1

İşte mesela etkileşimli (ve konuşkan) X uygulamaları başlatmak için kullanmak biraz senaryo bir xterm

#!/bin/bash 
exe="$1" 
shift 
"$exe" "[email protected]" 2>/tmp/$$."$exe".err 1>&2 & disown $! 

Hiçbir çıkış terminal gelirse ürünün ölmeyecek, ancak durumda bir şey sadece kullanmak Günlüğü istemiyorsanız tüm çıkış/tmp

bir günlük var yanlış gidiyor Bunun yerine/dev/null.

Ayrıca, komut dosyası alerjik iseniz de bir işlevden çalışır.

2

Görünüşe göre, nohup istediğiniz şeyi yapar. Sekme tamamlama problemi, bash'ın bir dosya ismini betiğe argüman olarak tamamlamaya çalıştığını düşünürken, tamamlanma kuralları, nohup'un ilk argümanı olarak bir komut aldığını bilir.

Nohup, nout'u ve stderr'i nohup.out'a yönlendirir ve ayrıca, eğer kabuğunuz çıkarsa komutu çalıştıracak.

+0

Sanırım 'nohup' neredeyse istediğim şey; İşlemlerini anladığım kadarıyla süreci otomatik olarak engellemez. – Philippe

+0

Hayır, ancak işlemi arka planda çalıştırmanız gerekiyorsa "nohup komutunu" kullanabilirsiniz. – nelz

İlgili konular