GNU/Linux >> Znalost Linux >  >> Linux

Shell:přesměrujte stdout na /dev/null a stderr na stdout

Co třeba tohle:

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

Cílem je "zálohovat" deskriptor stdout, zavřít původní stdout a poté přesměrovat strerr na uložený stdout.

Je to hodně podobné řešení, které poskytuje geirha, ale je explicitnější (kódování bash se může snadno velmi zatemnit).


Chcete

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

Zde je důležité pořadí. Předpokládejme, že stdin (fd 0), stdout (fd 1) a stderr (fd 2) jsou zpočátku připojeny k tty, takže

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

První věc, která se nastavuje, je potrubí. stdin jiného skriptu se připojí k rouře a stdout skriptu se připojí k rouře, takže deskriptory souborů skriptu zatím vypadají takto:

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

Dále dojde k přesměrování zleva doprava. 2>&1 způsobí, že fd 2 půjde všude tam, kam právě jde fd 1, což je potrubí.

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

Nakonec 1>/dev/null přesměruje fd1 na /dev/null

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

Konečným výsledkem je, že stdout skriptu je umlčen a jeho stderr je odeslán potrubím, které skončí v stdin jiného skriptu.

Viz také http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial

Všimněte si také, že 1>/dev/null je synonymem pro, ale explicitnější než >/dev/null


Linux
  1. Kdy použít /dev/random vs /dev/urandom?

  2. Zabránit odeslání příkazu Stdout i Stderr do libovolného terminálu nebo souboru?

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?

  1. DD z /dev/zero do /dev/null...co se vlastně stane

  2. Jak Linux používá /dev/tty a /dev/tty0

  3. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. Rozdíl mezi 2>&-, 2>/dev/null, |&, &>/dev/null A>/dev/null 2>&1?

  3. Proč jsou < nebo > vyžadovány pro použití /dev/tcp