Apa gunanya mengarahkan ulang output grep ke / dev / null?

24

Pertimbangkan baris ini:

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

Apa gunanya mencari pola dalam output jika hasil yang dibuang?

Dan, jika baris seperti itu muncul sebagai hal terakhir dalam skrip bash, apakah nilai keluarnya dikembalikan ke pemanggil skrip, atau diabaikan? (Saya berspekulasi apakah kita dapat menganggap ini dilakukan hanya untuk efek samping atau mengembalikan sesuatu ke penelepon entah bagaimana.)

JDługosz
sumber

Jawaban:

29

Kecurigaan Anda benar; status keluar dari perintah terakhir skrip akan diteruskan ke lingkungan panggilan. Jadi jawabannya adalah bahwa skrip ini akan mengembalikan status keluar 0 jika grepcocok dengan sesuatu dalam data, ada status 1 jika tidak ada kecocokan, dan keluar dari status 2 jika terjadi kesalahan.

Janis
sumber
27

Inti dari grephasil ping yang dibuang adalah bahwa penulis hanya menginginkan status pengembalian grep. Ia hanya ingin tahu apakah suatu pola cocok atau tidak. Dalam kasus Anda, yang terakhir akan grepmemeriksa apakah output perintah sebelumnya berisi baris yang dimulai dengan 200.

Dalam sistem POSIX modern, Anda dapat melakukan semuanya dengan grep -q tanpa mengalihkan ke /dev/null:

... | grep -q '^200'

Catatan bahwa menggunakan grep -qmemiliki efek samping yang kecil, terima kasih Stéphane Chazelas untuk menunjukkan komentarnya. grep -qkeluar segera setelah menemukan kecocokan pertama, jika licenseToolmasih menulis sesuatu setelah grepkeluar, ia akan menerima SIGPIPE.

cuonglm
sumber
2
dan grep -qmenggunakan lebih sedikit CPU
Skaperen
5
Seiring berjalannya waktu, grep -qditambahkan relatif baru-baru ini; banyak skrip yang masih digunakan > /dev/nullsebagai gantinya karena hanya itu yang Anda miliki di Zaman Es (yaitu, 1995).
zwol
3
Apakah kalimat pertama Anda kurang memiliki kata kerja?
AL
Ketidaksamaan lain antara "grep -q" dan "grep> / dev / null", dari manual GNU: "Namun, jika -q atau --quiet atau --silent digunakan dan garis dipilih, status keluar adalah, 0 bahkan jika kesalahan terjadi. "
Markus
jika dokumentasinya benar "status keluar adalah 0 bahkan jika terjadi kesalahan" ... Saya pikir -qopsi sepertinya tidak sesuai ... karena Anda ingin tahu tentang kesalahan dengan memeriksa status keluar.
Trevor Boyd Smith