İfadeyi >> /dev/null 2>&1
parçalara ayıralım:
Bölüm 1: >>
Çıkış Yönlendirme
Bu, program çıktısını yeniden yönlendirmek ve çıktıyı dosyanın sonuna eklemek için kullanılır. Daha...
Bölüm 2: /dev/null
Özel Dosya
Bu bir sözde aygıt özel dosyasıdır .
Komut ls -l /dev/null
size bu dosyanın ayrıntılarını verecektir:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Gözlemledin crw
mi Bu , seri erişimi sağlayan karakter-özel dosya türünde bir sözde aygıt dosyası anlamına gelir .
/dev/null
tüm girdileri kabul eder ve atar; çıktı üretmez (her zaman bir okumada dosya sonu göstergesi döndürür). Referans: Wikipedia
Bölüm 3: 2>&1
Dosya Tanımlayıcı
Bir program yürüttüğünüzde, işletim sistemi her zaman bir dosya açıldığında bildiğimiz gibi standart girdi, standart çıktı ve standart hata olmak üzere üç dosya açar, işletim sistemi ( çekirdekten ) dosya tanımlayıcı adı verilen negatif olmayan bir tamsayı döndürür . Bu dosyalar için dosya tanımlayıcı sırasıyla 0, 1 ve 2'dir.
Yani 2>&1
basitçe standart çıktıya yönlendirme standart hata diyor.
&
şu anlama gelir, dosya adı değil dosya tanımlayıcısıdır.
Kısacası, bu komutu kullanarak programınıza yürütme sırasında bağırmamanızı söylersiniz.
Kullanmanın önemi nedir 2>&1
?
Terminalde bir hata oluşsa bile herhangi bir çıktı üretmek istemiyorsanız. Daha açıklamak için aşağıdaki örneği ele alalım:
$ ls -l > /dev/null
Yukarıdaki komut için terminalde çıktı yazdırılmadı, ancak bu komut bir hata üretirse:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Çıkışı yeniden yönlendirmeme rağmen /dev/null
, terminalde yazdırılıyor. Bunun nedeni, hata çıkışını yeniden yönlendirmememizdir /dev/null
, bu nedenle hata çıkışını da yeniden yönlendirmek için aşağıdakileri eklemeniz gerekir 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
.