2013-07-24 14 views

cevap

2

sadece komut istemine tekrar çıktı almak istiyorsanız, bunu yapabilirsiniz yönlendirildi komutların belli bir grubun, parantez içinde bu komutları koyun:

{ 
    command 
    command 
} >/dev/null 
+2

Bu, yalnızca orijinal stdout'un durumun geçerli olduğu veya olmayabilecek olan TTY'ye gitmesi durumunda doğrudur. –

+0

@charlesduffy: Tamam. Belki noktayı özledim. Sadece bir komut isteminde çıktıyı tekrar görmeye çalıştıklarını düşündüm. –

+0

Kod bloklarını yeniden yönlendirmek hakkında iyi bir nokta. Umarım kabul edersem sakıncası yoktur. –

-1

Pek sayılmaz, yani çalışan bir işlem durumunu değiştirme gerektirecek gibi. Yapabileceğinizi varsaysanız bile, standart çıktıyı sıfırlamadan önce yazdığınız her şey gerçekten bitmiştir, çünkü bit kovasına gönderilmiştir.

15

Doğru yapmak için, orijinal FD 1'i/dev/null'a yeniden yazmadan önce başka bir yere kopyalamanız gerekir.

exec 5>&1 >/dev/null 
... 
exec 1>&5 

Başka bir seçenek yerine exec kullanmaktan daha blok içerisindeki stdout redirect olmaktır:

{ 
    ... 
} >/dev/null 
+0

"exec> & 5>/dev/null", "bash: 5: Hatalı dosya tanıtıcısı" ile cevap verecektir. – user2267134

+0

@ user2267134 Hata. Sabit. –

+0

@CharlesDuffy İlk yöntemi kullanarak STDERR ve STDOUT öğelerini yeniden yönlendirmenin bir yolu var mı? Şu anda sadece STDOUT (& 1) 'i yeniden yönlendiriyor. – jerzy

0

Ben

unset &1 
kullanmak stdout'u geri yüklemek için bu durumda, FD 5 üzerinde yedekleme
+0

Eh? Bash bunu 'unset & 1' olarak, yani arka planda "unset" komutunu çalıştırarak ve ardından "1" komutunu komut olarak çalıştırıyor gibi görünüyor. Dahası, bir yeniden yönlendirme sonrasında dosya tanımlayıcı tablosuna baktığımda, bir yedek tuttuğunu ve herhangi bir geri yükleme işleminin mümkün olduğunu gösteren hiçbir kanıt göremiyorum. Bu sözdizimini farklı bir kabuktan almadığınızdan emin misiniz? –

İlgili konular