Die Standardeingabe, abgekürzt stdin, ist der Strom, aus dem ein Programm normalerweise eingehende Daten liest. In einem interaktiven Terminal verbindet die Shell stdin üblicherweise mit deiner Terminaleingabe, sodass ein Programm lesen kann, was du tippst.
Text-Fu · Lektion 2
stdin (Standardeingabe)
Lerne, wie Programme die Standardeingabe lesen und wie Bash diesen Strom mit einer Datei verbindet.
Standardeingabe und Dateideskriptor 0
Konventionsgemäß verwenden die drei Standardströme folgende Dateideskriptoren:
0: Standardeingabe (stdin)1: Standardausgabe (stdout)2: Standardfehlerausgabe (stderr)
Ein Programm entscheidet selbst, ob und wie es diese Ströme verwendet. Ein Befehl, der stdin liest, wartet häufig auf Terminaleingaben, wenn weder ein Dateioperand noch eine andere Eingabequelle angegeben ist.
Welcher Dateideskriptor steht konventionsgemäß für die Standardeingabe?
Eine Datei nach stdin umleiten
Der Operator < weist Bash an, eine Datei zum Lesen zu öffnen und mit der Standardeingabe des Befehls zu verbinden:
$ cat < peanuts.txt
Hello World
Die Shell verarbeitet < peanuts.txt; cat liest lediglich Dateideskriptor 0. Der Pfad wird cat nicht als normaler Dateioperand übergeben.
Existiert die Eingabedatei nicht oder kann sie nicht geöffnet werden, meldet die Shell den Umleitungsfehler und startet den Befehl nicht mit dieser Eingabe.
Welcher Befehl lässt sort seine Standardeingabe aus names.txt lesen?
Dateioperand und Eingabeumleitung unterscheiden
Einige Befehle akzeptieren sowohl einen Dateinamen als Operand als auch stdin, doch die Ergebnisse können sich geringfügig unterscheiden. Zum Beispiel:
$ wc -l peanuts.txt
1 peanuts.txt
$ wc -l < peanuts.txt
1
Beide Formen zählen die Zeilen derselben Daten. In der ersten kennt wc den Dateinamen, weil er als Argument übergeben wurde. In der zweiten erhält der Befehl nur einen Strom auf stdin und kennt deshalb keinen auszugebenden Dateinamen.
Warum lässt wc -l < peanuts.txt den Namen peanuts.txt normalerweise in seiner Ausgabe weg?
Ein- und Ausgabeumleitung kombinieren
In einer Befehlszeile kannst du mehrere Ströme umleiten:
$ cat < peanuts.txt > banana.txt
Die Shell richtet zwei unabhängige Verbindungen ein:
< peanuts.txtöffnetpeanuts.txtals Standardeingabe voncat.> banana.txterstellt oder leertbanana.txtund verbindet die Datei mit der Standardausgabe voncat.
cat liest Bytes von stdin und schreibt sie nach stdout, sodass banana.txt den Quellinhalt erhält. Zum gewöhnlichen Kopieren einer Datei drückt cp peanuts.txt banana.txt die Absicht deutlicher aus; dieses Beispiel veranschaulicht Stromverbindungen.
Welche Datei liefert in cat < input.txt > output.txt die Standardeingabe und welche empfängt die Standardausgabe?
Mit diesen Übungen kannst du die Umleitung von stdin, stdout und stderr praktisch trainieren:
- Eingabe- und Ausgabeumleitung in Linux – Steuere Standardausgabe, Standardfehler und Standardeingabe mit Operatoren wie >, >> und 2> sowie dem Befehl tee.
- Datenstromumleitung – Verarbeite Eingabe-, Ausgabe- und Fehlerströme, kombiniere Ausgaben und nutze /dev/null für fortgeschrittene Dateioperationen.
Lektion abgeschlossen
Sie haben stdin (Standardeingabe) abgeschlossen
Du kannst nun die Standardeingabe eines Befehls über die Shell mit einer Datei verbinden.
Erkenne stdin als Dateideskriptor 0.
Leite eine lesbare Datei mit
<um.Unterscheide einen Dateinamenoperanden von umgeleiteter Eingabe.
Kombiniere stdin- und stdout-Umleitungen bewusst.
Lernfortschritt speichern
Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.
Kostenloses Konto erstellen