GNU/Linux >> Tutoriels Linux >  >> Linux

Shell :redirige stdout vers /dev/null et stderr vers stdout

Que diriez-vous de ceci :

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

L'idée est de "sauvegarder" le descripteur de sortie standard, de fermer la sortie standard d'origine, puis de rediriger strerr vers la sortie standard enregistrée.

C'est très similaire à la solution fournie par geirha, mais c'est plus explicite (le codage bash peut facilement devenir très obscur).


Vous voulez

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

L'ordre ici est important. Supposons que stdin (fd 0), stdout (fd 1) et stderr (fd 2) soient tous connectés à un tty initialement, donc

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

La première chose qui se met en place est le tuyau. Le stdin d'autre-script est connecté au tube, et la sortie standard du script est connectée au tube, donc les descripteurs de fichier du script ressemblent jusqu'à présent à :

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

Ensuite, les redirections se produisent, de gauche à droite. 2>&1 fait aller fd 2 là où va actuellement fd 1, c'est-à-dire le tuyau.

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

Enfin, 1>/dev/null redirige fd1 vers /dev/null

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

Résultat final, la sortie standard du script est réduite au silence et son stderr est envoyé via le canal, qui se retrouve dans le stdin d'autre script.

Voir aussi http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial

Notez également que 1>/dev/null est synonyme de, mais plus explicite que >/dev/null


Linux
  1. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  2. Différence entre 2>&-, 2>/dev/null, |&, &>/dev/null et>/dev/null 2>&1 ?

  3. Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

  4. Comment mapper les périphériques /dev/sdX et /dev/mapper/mpathY à partir du périphérique /dev/dm-Z

  5. Que sont les fichiers /dev/zero et /dev/null sous Linux

Comment rediriger la sortie vers /dev/null sous Linux

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

noyau :désactiver /dev/kmem et /dev/mem

Comment Linux utilise /dev/tty et /dev/tty0

echo ou print /dev/stdin /dev/stdout /dev/stderr

Pourquoi < ou > sont-ils nécessaires pour utiliser /dev/tcp