Intro
Manchmal sehen wir Befehle wie diesen in der Shell:
- $ ls foo > /dev/null 2>&1
Es kann schwierig sein, diese Funktion zum ersten Mal zu verstehen, deshalb wird sie hier kurz erklärt.
I/O-Umleitung
Angenommen, Sie haben jetzt eine einfache Textdatei:
Nun leiten Sie den Inhalt dieser Datei an einen anderen Ort um:
Bei der obigen Umleitungsaktion wird keine Ausgabe auf dem Terminal angezeigt, da der Befehl > den Inhalt von test.txt nachoutput.txt, die eine Standardausgabe (stdout) ist.
Im Gegensatz zur Standardausgabe gibt es den Standardfehler (stdr), z.B.
Bei der Umleitung ist ein Fehler aufgetreten, weil es keine Datei mit dem Namen no_such_file.txt in dem Verzeichnis darunter gibt. In diesem Fall ist es trotz der Verwendung des Befehls > nicht möglich, den Inhalt in output.txt einzugeben, da es keinen stdout-Inhalt gibt, sondern eine Fehlermeldung von stderror.
Dateideskriptor
Der Dateideskriptor kann als eine positive Ganzzahl für eine geöffnete Datei angesehen werden. Wenn Sie 100 offene Dateien haben, haben Sie im Grunde 100 entsprechende Dateideskriptoren.
In Unix/Unix-ähnlichen Systemen gibt es auch Dateideskriptoren für stdout und stderr, die, um es klar zu sagen, spezielle Ziele für die Ausgabe dieser Dateien habenfür diese Ausgabeziele:
- 1: für stdout
- 2: für stderr
Alles zusammen
Nach dem obigen Konzept kann man, wenn man den Inhalt einer bekannten Datei in eine andere Datei schreiben will, dies tun