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

Verhindern, dass ein Befehl sowohl Stdout als auch Stderr an ein Terminal oder eine Datei sendet?

Für diese Frage gibt es hier bereits Antworten :Weiterleitung nach /dev/null

(6 Antworten)
Vor 6 Jahren geschlossen.

Ich möchte verhindern, dass mein Programm stdout und stderr an Terminals, Dateien oder Geräte sendet. Dafür fallen mir drei Befehle ein, aber ich kann ihre Unterschiede nicht unterscheiden. Könnten Sie mir bitte die Bedeutung von jedem von ihnen erklären.

# ./run > /dev/null
# ./run > /dev/null 1>&2
# ./run > /dev/null 2>&1

Akzeptierte Antwort:

# ./run > /dev/null

Dadurch wird stdout nach /dev/null umgeleitet , aber es macht überhaupt nichts mit stderr. Da Sie gebeten haben, von stdout und stderr umzuleiten, macht dies nicht das, was Sie wollen.

# ./run > /dev/null 1>&2

Dadurch wird stdout nach /dev/null umgeleitet , und dann wird stdout erneut umgeleitet (1> ) dorthin, wo stderr hinzeigt (&2 ), was wahrscheinlich das Terminal ist und wo stdout wahrscheinlich hinwies, bevor Sie es umgeleitet haben. Der Nettoeffekt hier ist also (wahrscheinlich) überhaupt keine Umleitung für stdout, und was stderr betrifft, tun Sie immer noch nichts damit. Das ist also auch nicht das, was Sie wollen.

# ./run > /dev/null 2>&1

Dadurch wird stdout nach /dev/null umgeleitet , und leitet dann stderr (2> ) dorthin, wo stdout hinzeigt, also /dev/null weil Sie es gerade dorthin umgeleitet haben. Das scheint das zu sein, was Sie wollen.

Ich kann ihre Unterschiede nicht erkennen.

Eigentlich sollten Sie die Unterschiede ganz einfach erkennen können. Sagen wir ./run enthält dies:

#!/bin/sh
echo stdout
echo stderr >&2

Dann sollten die Ergebnisse wie folgt aussehen:

# ./run > /dev/null
stderr
# ./run > /dev/null 1>&2
stdout
stderr
# ./run > /dev/null 2>&1

Der Unterschied ist deutlich!


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

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

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

  4. Was sind /dev/zero- und /dev/null-Dateien in Linux

  5. screen Ihr Terminal '/dev/pts/0' kann nicht geöffnet werden - bitte überprüfen

/dev/null unter Linux

stdout umleiten, während ein Prozess läuft – Was sendet dieser Prozess an /dev/null

/dev/sdb:Keine solche Datei oder Verzeichnis (aber /dev/sdb1 etc. existiert)

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

echo oder print /dev/stdin /dev/stdout /dev/stderr

Warum sind < oder > erforderlich, um /dev/tcp