EMZETT.
Login

Shell: Pipes und Umleitungen

Kurz: In der Shell verbindet eine Pipe (|) die Ausgabe eines Programms mit der Eingabe des nächsten, und Umleitungen (>, <) lenken Ein- und Ausgabe in Dateien. Daraus baut man mächtige Befehlsketten aus kleinen Werkzeugen.

Genauer: Jedes Programm hat drei Standardkanäle: Eingabe (stdin, 0), Ausgabe (stdout, 1) und Fehlerausgabe (stderr, 2). Die Shell kann sie umhängen.

Im Detail

  • Pipe: cat log.txt | grep ERROR | sort | uniq -c | sort -rn | head filtert, zählt und rangiert Fehlermeldungen. Die Programme laufen gleichzeitig.
  • Ausgabe in Datei: befehl > datei überschreibt, befehl >> datei hängt an.
  • Eingabe aus Datei: befehl < datei.
  • Fehler trennen: befehl 2> fehler.txt, beides zusammen befehl > alles.txt 2>&1 oder kurz &> alles.txt (bash). Reihenfolge beachten: 2>&1 kopiert, wohin 1 gerade zeigt.
  • Wegwerfen: befehl > /dev/null 2>&1.
  • Gleichzeitig anzeigen und speichern: befehl | tee datei.txt.
  • Befehlsersetzung: $(befehl) setzt die Ausgabe eines Befehls in eine andere Zeile ein.
  • Here-Strings und Here-Docs: <<< "text" und <<EOF ... EOF übergeben Text als Eingabe.
  • Erfolg in Pipes: Standardmäßig zählt nur der Rückgabewert des letzten Befehls. set -o pipefail meldet auch frühere Fehler.

Siehe auch: Shell-Skripte schreiben, Bash