GNU/Linux >> Linux Esercitazione >  >> Linux

Perché uscire dal codice 141 con grep -q?

Questo perché grep -q esce immediatamente con uno stato zero non appena viene trovata una corrispondenza. Il zfs il comando sta ancora scrivendo sulla pipe, ma non c'è nessun lettore (perché grep è uscito), quindi viene inviato un SIGPIPE segnale dal kernel ed esce con uno stato di 141 .

Un altro luogo comune in cui vedi questo comportamento è con head . ad esempio

$ seq 1 10000 | head -1
1

$ echo ${PIPESTATUS[@]}
141 0

In questo caso, head leggi la prima riga e termina che ha generato un SIGPIPE segnale e seq terminato con 141 .

Vedi "Il famigerato segnale SIGPIPE" da The Linux Programmer's Guide.


Un'altra opzione sarebbe quella di non utilizzare una pipe, ma utilizzare una sostituzione di processo:

grep -q tank <(lista zfs)

Aggiornamento:immagino sia la stessa cosa, poiché anche il processo eseguito tra parentesi riceverà il sigpipe.


Non ho familiarità con zfs list , ma immagino che si lamenti della chiusura del suo output standard - grep -q esce immediatamente quando viene trovata una corrispondenza, a differenza di grep .


Linux
  1. Bash Prompt con il codice dell'ultima uscita

  2. L'applicazione C++ termina con il codice di uscita 143:cosa significa?

  3. Codice di ritorno grep di Linux

  4. Perché questo codice si arresta in modo anomalo con la randomizzazione degli indirizzi attiva?

  5. Come eseguire il grep dell'output di ps con le intestazioni

Manipolazione del testo dalla riga di comando con grep

Cattura gruppi con Awk o Grep?

Perché Rsync non riesce con tubo rotto (32), errore nella presa Io (codice 10) su Io.c(820)??

Comando Grep in Linux (con esempi)

10 esempi pratici di regex con grep

Come eseguire il grep con l'output a colori