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 | headfiltert, zählt und rangiert Fehlermeldungen. Die Programme laufen gleichzeitig. - Ausgabe in Datei:
befehl > dateiüberschreibt,befehl >> dateihängt an. - Eingabe aus Datei:
befehl < datei. - Fehler trennen:
befehl 2> fehler.txt, beides zusammenbefehl > alles.txt 2>&1oder kurz&> alles.txt(bash). Reihenfolge beachten:2>&1kopiert, 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 pipefailmeldet auch frühere Fehler.
Siehe auch: Shell-Skripte schreiben, Bash