GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la sortie de certains programmes Linux ne va-t-elle ni à STDOUT ni à STDERR ?

Cette question est traitée dans BashFAQ/032. Dans votre exemple, vous :

{ time sleep 1; } 2> /dev/null

La raison pour laquelle

time sleep 1 2>/dev/null

ne se comporte pas comme vous l'attendez parce qu'avec cette syntaxe, vous voudrez time la commande sleep 1 2>/dev/null (oui, la commande sleep 1 avec stderr redirigé vers /dev/null ). Le time intégré fonctionne de cette façon afin de rendre cela réellement possible.

Le bash intégré peut en fait le faire parce que... eh bien, c'est une fonction intégrée. Un tel comportement serait impossible avec la commande externe time généralement situé en /usr/bin . En effet :

$ /usr/bin/time sleep 1 2>/dev/null
$

Maintenant, la réponse à votre question

Pourquoi la sortie de certains programmes Linux ne va-t-elle ni à STDOUT ni à STDERR ?

est :c'est le cas, la sortie va à stdout ou stderr .

J'espère que cela vous aidera !


Votre question particulière sur time builtin a reçu une réponse, mais il existe certaines commandes qui n'écrivent pas non plus dans stdout ou à stderr . Un exemple classique est la commande Unix crypt . crypt sans argument chiffre l'entrée standard stdin et l'écrit sur la sortie standard stdout . Il demande à l'utilisateur un mot de passe en utilisant getpass() , qui génère par défaut une invite à /dev/tty . /dev/tty est le terminal actuel. Ecrire dans /dev/tty a pour effet d'écrire dans le terminal en cours (s'il y en a un, voir isatty() ).

La raison crypt impossible d'écrire dans stdout c'est parce qu'il écrit une sortie chiffrée dans stdout . Aussi, il est préférable d'inviter à /dev/tty au lieu d'écrire dans stderr de sorte que si un utilisateur redirige stdout et stderr , l'invite est toujours visible. (Pour la même raison, crypt impossible de lire le mot de passe de stdin , puisqu'il est utilisé pour lire les données à chiffrer.)


Linux
  1. Exemples de commande de temps Linux

  2. Pourquoi un Lun World Wide ID commence-t-il par le numéro 3 dans Linux dm-multipath

  3. Comment rediriger la sortie de la commande time vers un fichier sous Linux ?

  4. Pourquoi le préprocesseur C interprète-t-il le mot linux comme la constante 1 ?

  5. Déterminez si la sortie est stdout ou stderr

Vérifier le fuseau horaire sous Linux

Linux - Pourquoi les utilitaires Linux n'utilisent-ils pas un appel système pour obtenir l'heure actuelle ?

Comprendre la commande time sous Linux

Ajoutez une heure spécifique lors de l'utilisation de la commande linux date

Pourquoi pr_debug du noyau Linux ne donne-t-il aucune sortie ?

Linux :Comment utiliser un fichier en entrée et en sortie en même temps ?