GNU/Linux >> Linux Esercitazione >  >> Linux

Shell:reindirizza stdout a /dev/null e stderr a stdout

Che ne dici di questo:

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

L'idea è di "fare il backup" del descrittore stdout, chiudere lo stdout originale e quindi reindirizzare strerr allo stdout salvato.

È molto simile alla soluzione fornita da geirha, ma è più esplicita (il codice bash può facilmente diventare molto oscurato).


Vuoi

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

L'ordine qui è importante. Supponiamo che stdin (fd 0), stdout (fd 1) e stderr (fd 2) siano tutti connessi inizialmente a un tty, quindi

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

La prima cosa che viene installata è la pipa. lo stdin di altri script viene connesso alla pipe e lo stdout dello script viene connesso alla pipe, quindi i descrittori di file dello script finora sono simili a:

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

Successivamente, si verificano i reindirizzamenti, da sinistra a destra. 2>&1 fa andare fd 2 dove sta andando fd 1, che è la pipe.

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

Infine, 1>/dev/null reindirizza fd1 a /dev/null

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

Risultato finale, lo stdout dello script viene silenziato e il suo stderr viene inviato attraverso la pipe, che finisce nello stdin di other-script.

Vedi anche http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial

Nota anche che 1>/dev/null è sinonimo di, ma più esplicito di >/dev/null


Linux
  1. Differenza tra 2>&-, 2>/dev/null, |&, &>/dev/null E>/dev/null 2>&1?

  2. Impedire a un comando di inviare sia Stdout che Stderr a qualsiasi terminale o file?

  3. Come mappare il dispositivo /dev/sdX e /dev/mapper/mpathY dal dispositivo /dev/dm-Z

  4. Cosa sono i file /dev/zero e /dev/null in Linux

  5. Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

Come reindirizzare l'output su /dev/null in Linux

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

DD da /dev/zero a /dev/null... cosa succede realmente

kernel:disabilitare /dev/kmem e /dev/mem

bash:reindirizza stderr al file e stdout + stderr allo schermo

Crea un dispositivo a blocchi virtuale che scrive su /dev/null