2> / dev / null ne anlama geliyor?


242

Aşağıdaki komut satırının kısa bir açıklamasını istiyorum:

grep -i 'abc' content 2>/dev/null 

Yanıtlar:


347

> Operatörü çıkışı genellikle bir dosyaya yönlendirir, ancak bir cihaza olabilir. Eklemek için >> de kullanabilirsiniz.

Bir sayı belirtmezseniz, standart çıkış akışının kabul edilir, ancak hataları da yönlendirebilirsiniz

> filestdout'u dosyaya
1> fileyönlendirir stdout'u dosyaya
2> fileyönlendirir stderr'i dosyaya
&> fileyönlendirir stdout'u ve stderr'i dosyaya yönlendirir

/dev/nullsıfır aygıtı, istediğiniz girişi alır ve çöpe atar. Herhangi bir çıkışı bastırmak için kullanılabilir.


6
> /dev/null 2>&1ve arasında bir fark var mı&> /dev/null
Alexander Mills

13
Bugün pratikte 2>&1eski bir sözdizimi olduğunu sanmıyorum, bu yüzden &>yıllar önce işe yaramazdı ama ikisi de eşdeğerdir.
Warren Hill,

28

Kısacası, stderr(fd 2) 'yi kara deliğe yönlendirir (komutun çıktısını atar).

Yeniden yönlendirme için bazı daha yaygın kullanım durumları:

command > /dev/null 2>&1 &

commandArka planda çalıştırın , atın stdoutvestderr

command >> /path/to/log 2>&1 &

commandStdout ve stderr komutunu çalıştırın ve bir günlük dosyasına ekleyin.

Bash 4+ 'de, daha kısa (ancak daha az okunabilir) bir form işlevseldir.

command &>> /path/to/log

3
Kullanmak için iyi bir neden var mı > /dev/null 2>&1yerine &> /dev/null?
Craig McQueen

7
@CraigMcQueen &>Bash 4'te yeni, eski sadece geleneksel yol, sadece buna alışkınım (hatırlaması kolay).
Terry Wang

Yorumunda göre @CraigMcQueen Bu yanıt , &> /dev/nullbazı kabukları ama> / dev / null 2> & 1 tüm POSIX uyumlu kabukları çalışacak çalışmayabilir.
Yığın Underflow

3
Neden 2> & 1 ve 2 & 1> değil?
marienbad

1
@marienbad yani sözdizimi :-) gönderme değerinde bir soru aslında fn>target, nerede fnbir dosya numarası (0-2 tipik, bazı programlar daha fazla sayı tanımlamak) ve targetöneki - genellikle bir dosya adıdır ama burada başka filenumber olduğunu &hangi "Bir dosya adı yerine dosya numarası istiyorum" için sözdizimi.
toolforger

9

/dev/nullLinux / Unix'te karadelik olarak kabul edilir, bu yüzden buna bir şey koyabilirsin ama onu geri alamazsın /dev/null.

Ayrıca, stderr'i (yani ) kara deliğe (yani ) 2>yönlendirdiğiniz (yani >) olduğunuz anlamına gelir2/dev/null

Emriniz:

grep -i 'abc' content 2>/dev/null 

Bunun gibi başka bir eğik çizgi ile bitmeye çalışmayın - 2>/dev/null/(bu bir dizin değil).


2

grep -i 'abc' içeriği, herhangi bir hata dahil olmak üzere konsolunuzda görüntülenen çıktıyı üretecektir.

Belirlemek 2>/dev/null, hataları filtrelendirecaktır, böylece konsolunuza gönderilmeyecektir.

Daha detaylı olarak: 2, hataların yazıldığı hata tanımlayıcısını temsil eder. Varsayılan olarak konsolda yazdırılırlar.

\> çıktıyı belirtilen yere yönlendirir, bu durumda /dev/null

/dev/null ihmal etmek istediğiniz çıktıyı gönderdiğiniz standart Linux aygıtıdır.


Özlü ve konu üzerine. İyi cevap.
Sergiy Kolodyazhnyy
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.