GNU/Linux >> Linux Esercitazione >  >> Linux

Perché ricevo cat:errore di scrittura:tubo rotto raramente e non sempre

Il motivo è perché la pipe è chiusa da grep quando ha ancora dei dati da leggere da cat . Il segnale SIGPIPE viene catturato dal gatto ed esce.

Ciò che di solito accade in una pipeline è che la shell esegue cat in un processo e grep in un altro. Lo stdout di cat è connesso all'estremità di scrittura della pipe e allo stdin di grep alla fine della lettura. Quello che è successo è stato grep ha colpito una ricerca di pattern che non esisteva ed è uscito immediatamente causando la chiusura dell'estremità di lettura del pipe, che cat non gli piace poiché ha alcuni dati in più da scrivere nella pipe. Poiché le azioni di scrittura si verificano su un altro che è stato chiuso dall'altra parte, SIGPIPE viene catturato dal cat su cui esce immediatamente.

Per un caso così banale, potresti rimuovere del tutto l'utilizzo della pipeline ed eseguirlo come grep "pattern" file.txt quando i contenuti del file sono resi disponibili sullo stdin di grep da cui potrebbe leggere.


Linux
  1. Linux – Perché usiamo Su – e non solo Su?

  2. Perché Grep -o -w non mi dà l'output previsto su Mac Os X?

  3. Perché è Rm -rf e non Rmdir -rf?

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

  5. Perché ottenere l'errore mongod morto ma i sottosistemi bloccati e lo spazio libero insufficiente per i file journal su Linux?

Perché viene visualizzato l'errore:snap "xyz" non trovato?

Grep e coda -f?

Perché il descrittore di file viene aperto e letto solo una volta?

Correzione dell'errore del tubo rotto con la connessione SSH

7 Linux Grep OR, Grep AND, Grep NOT Esempi di operatori

Perché il mio collegamento simbolico crea un file e non una cartella?