Disons que j'exécute une commande ou un script shell, et cela me donne une sortie. Sans connaître les composants internes de cette commande ou de ce script shell, comment déterminer si la sortie provient de stderr
ou stdout
?
Par exemple,
$ ls -ld /
drwxrwxr-t 35 root admin 1258 Dec 11 19:16 /
contre
ls -ld /test
ls: /test: No such file or directory
Comment puis-je m'assurer que la première commande imprimée sur stdout
et le second à stderr
(l'a fait ?) ?
Réponse acceptée :
Il n'y a aucun moyen de savoir une fois que la sortie a déjà été imprimée. Dans ce cas, les deux stdout
et stderr
sont connectés au terminal, de sorte que les informations sur le flux qui a été écrit étaient déjà perdues au moment où le texte est apparu sur votre terminal ; ils ont été combinés par le programme avant même d'arriver au terminal.
Ce que vous pouvez faire, dans un cas comme celui ci-dessus, serait d'exécuter la commande avec stdout
et stderr
redirigé vers différents endroits et voir ce qui se passe. Ou exécutez-le deux fois, une fois avec stdout
redirigé vers /dev/null
et une fois avec stderr
redirigé vers /dev/null
, et voyez lequel de ces cas entraîne l'affichage du texte.
Vous pouvez rediriger stdout
à /dev/null
en taquant >/dev/null
à la fin de la ligne de commande, et vous pouvez rediriger stderr
à /dev/null
en ajoutant 2>/dev/null
.