Qu'est-ce que Stderr?

Stderr, également connu sous le nom d' erreur standard, est le descripteur de fichier par défaut dans lequel un processus peut écrire des messages d'erreur.

Dans les systèmes d'exploitation de type Unix, tels que Linux, macOS X et BSD, stderr est défini par le standard POSIX. Son numéro de descripteur de fichier par défaut est 2 .

Dans le terminal, l'erreur standard est affichée par défaut sur l'écran de l'utilisateur.

Stderr sur la ligne de commande Linux

Dans bash, l'erreur standard peut être redirigée sur la ligne de commande. La redirection de stderr peut s'avérer utile si vous devez capturer les messages d'erreur dans un fichier journal séparé ou les masquer entièrement.

Par exemple, considérons la commande de recherche suivante:

 trouver / -iname '* quelque chose *' 
 / usr / share / doc / quelque chose / usr / share / doc / quelque chose / exemples / quelquechose_random: '/ run / udisks2': Autorisation refusée find: `/ run / wpa_supplicant ': Autorisation refusée / usr / share / quelque chose / usr / jeux / quelque chose 

Nous rencontrons des erreurs parce que find essaie de chercher dans quelques répertoires du système que nous n'avons pas l'autorisation de lire. Les lignes indiquant "Autorisation refusée" sont des messages d'erreur et ont été écrites dans stderr . Les autres lignes ont été écrites sur stdout (sortie standard). Par défaut, ils sont tous deux affichés sur le terminal.

Pour masquer stderr, nous pouvons les rediriger en référençant le numéro de descripteur de fichier d'erreur standard 2 et un opérateur "redirection de sortie" > .

 find / -iname '* quelque chose *' 2> / dev / null 
 / usr / share / doc / quelque chose / usr / share / doc / quelque chose / exemples / quelque-chose_random / usr / share / quelque chose / usr / jeux / quelque chose 

Les erreurs ne sont plus affichées car toutes les sorties sur stderr ont été redirigées vers / dev / null, le périphérique spécial sous Linux qui "ne va nulle part".

Nous pourrions également rediriger toutes les erreurs dans un fichier:

 find / -iname '* quelque chose *' 2> output.txt 
 / usr / share / doc / quelque chose / usr / share / doc / quelque chose / exemples / quelque-chose_random / usr / share / quelque chose / usr / jeux / quelque chose 

Maintenant, si vous lisez le contenu de output.txt, vous verrez que les messages d'erreur ont été enregistrés ici:

 cat output.txt 
 find: `/ run / udisks2 ': Autorisation refusée find:` / run / wpa_supplicant': Autorisation refusée 

Pour plus d'informations sur la redirection des flux de données, voir Redirection in bash.

Message d'erreur, termes du système d'exploitation