Ich suche nur nach dem Unterschied zwischen
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
und ihre Portierbarkeit mit Nicht-Bourne-Shells wie tcsh
, mksh
usw.
Akzeptierte Antwort:
Zum Hintergrund:
- eine Nummer 1 =Standardausgabe (d. h. STDOUT)
- eine Nummer 2 =Standardfehler (d. h. STDERR)
- wenn eine Nummer nicht explizit angegeben ist, dann Nummer 1 wird von der Shell (bash) übernommen
Gehen wir zunächst auf die Funktion dieser ein. Als Referenz siehe Advanced Bash-Scripting Guide.
Funktionen
2>&-
Die allgemeine Form davon ist M>&-
, wobei "M" ist eine Dateideskriptornummer. Dies schließt die Ausgabe für den Dateideskriptor, auf den verwiesen wird, d. h. „M“ .
2>/dev/null
Die allgemeine Form davon ist M>/dev/null
, wobei "M" ist eine Dateideskriptornummer. Dadurch wird der Dateideskriptor „M“ umgeleitet , nach /dev/null
.
2>&1
Die allgemeine Form davon ist M>&N
, wobei "M" &"N" sind Dateideskriptornummern. Es kombiniert die Ausgabe der Dateideskriptoren „M“ und „N“ in einen einzigen Stream.
|&
Dies ist nur eine Abkürzung für 2>&1 |
. Es wurde in Bash 4 hinzugefügt.
&>/dev/null
Dies ist nur eine Abkürzung für >/dev/null 2>&1
. Es leitet Dateideskriptor 2 (STDERR) und Deskriptor 1 (STDOUT) nach /dev/null
um .
>/dev/null
Dies ist nur eine Abkürzung für 1>/dev/null
. Es leitet den Dateideskriptor 1 (STDOUT) nach /dev/null
um .
Portabilität auf Nicht-Bash, tcsh, mksh usw.
Mit anderen Shells außerhalb von csh
habe ich mich nicht viel beschäftigt und tcsh
. Meine Erfahrung mit diesen 2 im Vergleich zu den Umleitungsoperatoren von bash ist, dass bash in dieser Hinsicht überlegen ist. Weitere Einzelheiten finden Sie auf der tcsh-Manpage.
Von den nachgefragten Befehlen wird keiner direkt von csh/tcsh unterstützt. Sie müssten unterschiedliche Syntaxen verwenden, um ähnliche Funktionen zu erstellen.