GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum wird diese Shell-Pipeline beendet?

Piping funktioniert, indem der Ausgang eines Prozesses A mit dem Eingang von B verbunden wird. Die Verbindung kann unterbrochen werden, wenn

  • A schließt seine Ausgabe. B erhält EOF.
  • B schließt seine Eingabe. A erhält eine Fehlermeldung, dass die Ausgabe nicht mehr verfügbar ist, wenn es versucht, das nächste Byte zu schreiben.

Da diese beiden Fälle so häufig vorkommen, wurde die Behandlung in die C-Standardbibliothek verschoben.


head schließt die Eingabedatei nach dem Lesen des erforderlichen Betrags. wenn eine Pipe von einer Seite geschlossen wird, bekommt die andere Seite Schreibfehler; dies verursacht base64 zu schließen, was wiederum cat bewirkt zu schließen.


Nach base64 gibt 10 Bytes aus, head bekommt genug Ein- und Ausgänge. Wenn Ersteres versucht, mehr Bytes auszugeben, empfängt es das SIGPIPE-Signal und wird daher ebenfalls beendet. Aus dem gleichen Grund cat wird der Reihe nach beendet.


Linux
  1. Warum überprüft Bashrc, ob die aktuelle Shell interaktiv ist?

  2. Warum fügt die Ssh -t Option Cr &Lf in der umgeleiteten Ausgabe hinzu?

  3. Warum erfordert „ls“ einen separaten Prozess zur Ausführung?

  4. TMOUT – Unix-Shell automatisch beenden, wenn keine Aktivität vorhanden ist

  5. Warum gibt Linux beim Drücken von Strg+C immer ^C aus?

Was bedeutet diese Ausgabe von Xev?

Warum funktioniert dieses „beim Lesen“ in einem Terminal, aber nicht in einem Shell-Skript?

Warum gibt Ls -l eine andere Größe als Ls -s aus?

Warum fügt Strg + V nicht in Bash (Linux-Shell) ein?

Warum funktioniert diese Regex nicht unter Linux?

Warum benötigt der 'bin'-Benutzer eine Login-Shell?