Grep çıktısının / dev / null dizinine yönlendirilmesindeki nokta nedir?


24

Bu çizgiyi göz önünde bulundurun:

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null

Sonucu ise çıkışta model arayan ne anlamı var o atılır?

Ve, böyle bir satır bir bash betiğinde en son şey olarak görünüyorsa, çıkış değeri betiğin arayanına iade edilir mi yoksa yoksayılır mı? (Bunun yalnızca yan etkiler için yapıldığını veya arayana bir şekilde geri döndüğünü varsayacağımızı tahmin ediyorum.)

Yanıtlar:


29

Şüphe doğru; betiğin son komutunun çıkış durumu, arama ortamına geçirilir. Yani cevap, bu betiğin grepverilerde birisiyle eşleşen bir çıkış durumu 0, eşleşme yoksa durum 1'i ve bir hata oluştuğunda durum 2'den çıkmasıdır.


27

grepAtılan ping çıktısının noktası , yazarın yalnızca iade durumunu istediğidir grep. Sadece bir kalıbın eşleşip eşleşmediğini bilmek ister. Sizin durumunuzda, grepönceki komutun çıktısının başlangıç ​​ile başlayan herhangi bir satır içerip içermediğini son kontrol eder 200.

Modern POSIX sisteminde, hepsini yönlendirmeden grep -q ile yapabilirsiniz /dev/null:

... | grep -q '^200'

Kullanmanın grep -qküçük bir yan etkisi olduğu notu, yorumunda gösterdiği için Stéphane Chazelas'a teşekkür ediyor . grep -qilk eşleşmeyi bulur bulmaz çıkar, eğer çıktıktan licenseToolsonra hala bir şey grepyazarsa, bir SİGORTA alır.


2
ve grep -qdaha az CPU kullanıyor
Skaperen

5
Bunlar geçtikçe grep -qnispeten yakın zamanda eklenmiş; komut sürü hala kullanmak > /dev/nullolduğunu (yani, 1995 ise) geri Buz Çağı'nda tek şeydi çünkü yerine.
zwol

3
İlk cümlenizde fiil yok mu?
AL

GNU el sayfasından "grep -q" ve "grep> / dev / null" arasındaki bir başka eşitsizlik: "Ancak, -q veya --quiet veya --silent kullanılırsa ve bir satır seçilirse, çıkış durumu 0 bir hata meydana gelse bile. "
Mark

Dokümantasyon doğruysa "bir hata oluşsa bile çıkış durumu 0'dır" ... bence -qseçenek uygun görünmüyor ... çünkü çıkış durumunu kontrol ederek hatayı bilmesini istiyorsunuz.
Trevor Boyd Smith
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.