GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterschied zwischen 2>&-, 2>/dev/null, |&, &>/dev/null und>/dev/null 2>&1?

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.


Linux
  1. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  2. Wie portabel sind /dev/stdin, /dev/stdout und /dev/stderr?

  3. Was ist der Unterschied zwischen /sbin/nologin und /bin/false?

  4. Der Unterschied zwischen /opt und /usr/local?

  5. Wann sollte /dev/random vs. /dev/urandom verwendet werden?

Der Unterschied zwischen „$ . Foo‘ und ‚$ ./foo‘??

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

Unterschied zwischen /etc/crontab und crontab -e

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

Kernel:/dev/kmem und /dev/mem deaktivieren

Unterschiede zwischen /dev/sda und /dev/sda1