Linux'ta bir kabuk uygulamasının çıktısını nasıl gizleyebilirim?


Yanıtlar:


68

Herhangi bir programın çıktısını görünmeyecek şekilde yeniden yönlendirebilirsiniz.

$ program > /dev/null

Bu standart çıktıyı yönlendirecektir - hala herhangi bir hata göreceksiniz

$ program &> /dev/null

Bu, hatalar da dahil olmak üzere tüm çıktıları yönlendirecektir.


İlki wget için işe yaramadı
Jader Dias

Bunun nedeni, wget'ın çıktısının bir kısmı için stderr kullanmasıdır. İkincisi çalışmalı.
theotherreceive

2
Bu arada, bu wget çıktısını bir günlük dosyasına kaydetmek isteyebilirsiniz, böylece indirme işleminiz durduğunda, bunun nedenini anlayabilirsiniz. Zaten bir senaryoda ise. Bu bir kereye mahsus bir tür koşuysa, o zaman evet, çöp kutusuna
Matt Simmons

1
İçin wgetkullanabilirsiniz -qyapmak seçenekleri o sessiz.
pkhamre

/ Dev / tty'ye doğrudan yazılan çıktıyı bastırmanın herhangi bir yolu var mı?
d11wtq

30

Komut satırında üç adet G / Ç aygıtı vardır.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Standart çıkışı (varsayılan çıktıyı) bir dosyaya yönlendirmek (ve dosyanın üzerine yazmak),

 command > file.log 

File.log dosyasına eklemek için 2> s

 command >> file.log

standart hatayı file.log dosyasına yönlendirmek için

 command 2> file.log

ve eklemek

 command 2>> file.log

Çıktıları tek bir akışta birleştirmek ve hepsini bir yere göndermek için

 command > file.log 2>&1 

Bu, 2'ye (stderr) 1'e (stdout) ve stdout'u file.log'a gönderir.

Standardın stdin kodunu bekleyen bir komuta yönlendirmenin de mümkün olduğuna dikkat edin.

 command << file.txt 

EDIT
Daha fazla ayrıntı için, Gelişmiş Bash Komut Dosyası Kılavuzu'na göz atın.


Birisi nasıl command > file.log 2>&1çalıştığını açıklayabilir mi?
Cory Klein

Ne kadar düşük bir seviyeyi bilmek istersiniz?
Matt Simmons

3
@ nomoreink: aslında 2 komut, biri > fileve diğeri 2>&1. İlki, standardı bir dosyaya yönlendirir. İkincisi, 2. dosya tanımlayıcısını alır ve birincisine yönlendirir. Tersini yapabilir, standart çıktıyı kullanarak standart hataya >&2yönlendirebilir ve ardından standart hatayı bir dosyaya yönlendirebilirsiniz 2> file.
Hubert Kario

12

Saklamak stdout

./command >/dev/null

Gizle stdoutvestderr

./command >/dev/null 2>&1

Terminali gizle stdoutve stderrbırak (komutu arka planda çalıştır)

./command >/dev/null 2>&1 &

3

Çıktıyı gizlemek istiyorsanız (ve bir dosyaya kaydetmiyorsanız), şunları kullanabilirsiniz:

Düzenlendi:

$ command &> / dev / null


Bu çıktıyı null adındaki bir dosyaya yönlendirecektir
theotherreceive

Boş bir dosya oluşturdu
Jader Dias

1
/ dev / null demek istemedin, değil mi?
Babu

1
Evet, isterdim Babu. Ben $ komut &> / dev / null demek istedim. Kendi iyiliğim için çok hızlı yazdığım için özür dilerim.
Lucho

2

Mac OS X için (10.6 "Snow Leopard"):

Çıktı / hata dosya tanımlayıcısını kontrol ederek programın bildirmesine izin vermeden çıktıyı gizlemeniz gerekiyorsa, aşağıdakileri bir kabuk içinde kullanmayı deneyebilirsiniz:

stty flusho; command ;stty -flusho

ya da sadece terminalden girişi gizlemek istiyorsanız:

stty  -echo; command ;stty  echo

Daha fazla bilgi için stty (1) kılavuz sayfasına bakınız.

Bütün bildiğim Linux için Ubunutu (10.04 "Lucid") ve bazı "Debian / Arch" (aşağıda yorumlandı - tnx hendry) flushoayarının olmadığı (ve bu sayfada manüel olarak uygun başka bir şey göremiyorum). . echoAyar zaten Ubuntu üzerinde çalışır.


Debian / Arch altındaki varsayılan stty'nin bu seçenekleri yok.
hendry

Tabii ki OP’nin işletim sisteminde bile olmadığımı söylemeliydim. Yayınımı düzenledi.
12'de
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.