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

Shell:leite stdout nach /dev/null und stderr nach stdout um

Wie wäre es damit:

./script 3>&1 1>/dev/null 2>&3 | ./other-script

Die Idee ist, den stdout-Deskriptor zu "sichern", die ursprüngliche stdout zu schließen und dann strerr auf die gespeicherte stdout umzuleiten.

Es ist der von geirha bereitgestellten Lösung sehr ähnlich, aber expliziter (die Bash-Codierung kann leicht sehr undurchsichtig werden).


Sie wollen

./script 2>&1 1>/dev/null | ./other-script

Die Reihenfolge ist hier wichtig. Nehmen wir an, stdin (fd 0), stdout (fd 1) und stderr (fd 2) sind anfänglich alle mit einem tty verbunden, also

0: /dev/tty, 1: /dev/tty, 2: /dev/tty

Das erste, was aufgebaut wird, ist das Rohr. stdin von other-script wird mit der Pipe verbunden und stdout von script wird mit der Pipe verbunden, also sehen die Dateideskriptoren von script bisher so aus:

0: /dev/tty, 1: pipe, 2: /dev/tty

Als nächstes erfolgen die Umleitungen von links nach rechts. 2>&1 lässt fd 2 dorthin gehen, wo fd 1 gerade hingeht, was die Pipe ist.

0: /dev/tty, 1: pipe, 2: pipe

Zum Schluss 1>/dev/null leitet fd1 auf /dev/null um

0: /dev/tty, 1: /dev/null, 2: pipe

Als Endergebnis wird die stdout des Skripts stummgeschaltet und ihre stderr wird durch die Pipe gesendet, die in der stdin von other-script endet.

Siehe auch http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial

Beachten Sie auch, dass 1>/dev/null ist synonym zu, aber expliziter als >/dev/null


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

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

  3. So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

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

  5. Leite stderr nach /dev/null um

So leiten Sie die Ausgabe unter Linux nach /dev/null um

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

DD von /dev/zero nach /dev/null ... was eigentlich passiert

Wie Linux /dev/tty und /dev/tty0 verwendet

bash:leite stderr auf Datei und stdout + stderr auf Bildschirm um

Erstellen Sie ein virtuelles Blockgerät, das in /dev/null schreibt