GNU/Linux >> Belajar Linux >  >> Linux

Mengapa keluar kode 141 dengan grep -q?

Ini karena grep -q keluar segera dengan status nol segera setelah kecocokan ditemukan. zfs perintah masih menulis ke pipa, tetapi tidak ada pembaca (karena grep telah keluar), sehingga dikirim SIGPIPE sinyal dari kernel dan keluar dengan status 141 .

Tempat umum lainnya di mana Anda melihat perilaku ini adalah dengan head . mis.

$ seq 1 10000 | head -1
1

$ echo ${PIPESTATUS[@]}
141 0

Dalam hal ini, head baca baris pertama dan akhiri yang menghasilkan SIGPIPE sinyal dan seq keluar dengan 141 .

Lihat "Sinyal SIGPIPE yang Terkenal" dari Panduan Programmer Linux.


Opsi lain adalah tidak menggunakan pipa, tetapi menggunakan substitusi proses:

grep -q tank <(daftar zfs)

Pembaruan:Saya rasa hal yang sama, karena proses yang dijalankan di dalam tanda kurung juga akan menerima sigpipe.


Saya tidak terbiasa dengan zfs list , tapi saya kira itu mengeluh tentang keluaran standarnya yang ditutup - grep -q keluar segera ketika kecocokan ditemukan, tidak seperti grep .


Linux
  1. Cara memahami keluaran warna

  2. Kode pengembalian grep Linux

  3. Cara grep keluaran ps dengan header

  1. Kode keluar baris perintah bash didemistifikasi

  2. Mencantumkan semua alamat email dalam file dengan grep

  3. Tangkap Grup Dengan Awk Atau Grep?

  1. Mengapa Rsync Gagal Dengan Pipa Rusak (32), Kesalahan Di Soket Io (kode 10) Di Io.c (820)??

  2. Bash Prompt dengan Kode Keluar Terakhir

  3. Aplikasi C++ diakhiri dengan 143 kode keluar - apa artinya?