GNU/Linux >> Tutoriels Linux >  >> Linux

Empêcher une commande d'envoyer à la fois Stdout et Stderr à n'importe quel terminal ou fichier ?

Cette question a déjà des réponses ici :redirection vers /dev/null

(6 réponses)
Fermé il y a 6 ans.

Je souhaite empêcher mon programme d'envoyer stdout et stderr à des terminaux, fichiers ou périphériques. Pour cela, j'ai trois commandes qui me traversent l'esprit, mais je ne peux pas distinguer leurs différences. Pourriez-vous s'il vous plaît m'expliquer la signification de chacun d'eux s'il vous plaît.

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

Réponse acceptée :

# ./run > /dev/null

Cela redirige stdout vers /dev/null , mais cela ne fait rien du tout avec stderr. Puisque vous avez demandé de rediriger depuis stdout et stderr, cela ne fait pas ce que vous voulez.

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

Cela redirige stdout vers /dev/null , puis il redirige à nouveau stdout (1> ) à l'endroit où pointe stderr (&2 ) qui est probablement le terminal et est probablement l'endroit où stdout pointait avant de le rediriger. Donc, l'effet net ici est (probablement) aucune redirection pour stdout, et comme pour stderr, vous ne faites toujours rien avec. Ce n'est donc pas non plus ce que vous voulez.

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

Cela redirige stdout vers /dev/null , puis il redirige stderr (2> ) à l'endroit où pointe stdout, qui est /dev/null parce que c'est là que vous venez de le rediriger. Cela semble être ce que vous voulez.

Je ne peux pas distinguer leurs différences.

En fait, vous devriez être capable de distinguer les différences assez facilement. Disons ./run contient ceci :

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

Ensuite, les résultats devraient être les suivants :

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

La différence est nette !


Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

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

  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

/dev/null sous Linux

screen Impossible d'ouvrir votre terminal '/dev/pts/0' - veuillez vérifier

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

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

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

Créer un périphérique de bloc virtuel qui écrit dans /dev/null