File Descriptor of Shell Script

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:

Aeinfache Textdatei.

Nun leiten Sie den Inhalt dieser Datei an einen anderen Ort um:

Den Inhalt der Datei umleiten.

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.

Ein Fehler trat auf bei6082>Bei der Umleitung ist ein Fehler aufgetreten.

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

Dateiinhalt an anderen Ort umleiten überstdout.

Die 1 auf dieser Seite steht für stdout, dessen Syntax wie folgt dargestellt wird:

  • >

Wenn Sie also sehen, wie jemand von.foo > nach.bar schreibt, lässt er einfach das

Um stderr umzuleiten, kann man auch folgendes tun:

Fehlermeldung über stderr an einen anderen Ort umleiten.

Wenn Sie sowohl stdout als auch stderr an dasselbe Ziel umleiten wollen, können Sie dies tun

Umleiten von stderr an denselben Ort wie stdout.
  • &1 wird als Verweis auf eine Dateideskriptor-ID von 1 verwendet, d.h. ein Verweis auf stdout.
  • 2>&1 bedeutet, dass der Inhalt von stderr nach stdout umgeleitet wird.

Zusammenfassung

  • Gewöhnlich gibt es zwei Ziele für die Ausgabe: stdout und stderr.
  • Wir können die Ausgabe an verschiedene Orte leiten, aber normalerweise in eine Datei.
  • Der Dateideskriptor kann verwendet werden, um zwischen stdout (1) und stderr (2) zu unterscheiden.
  • Befehl > output_location ist eigentlich eine Abkürzung von Befehl 1> output_location.
  • Wir können & verwenden, um auf andere Dateideskriptoren zu verweisen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.