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 .