Déterminez si la sortie est stdout ou stderr


22

Comment puis-je déterminer si ce qu'un processus génère est stdout ou stderr?

Réponses:


22

Je ne connais que trois façons de déterminer ce qu'un programme va sortir sur STDOUT et quoi sur STDERR

  1. Lisez la documentation. Ou

  2. Expérimentez avec la redirection †

  3. imprimer STDERR en rouge

†Par exemple:

program > program.stdout 2> program.stderr

Regardez ensuite les deux fichiers de sortie pour voir ce que le programme a écrit dans STDOUT et ce qu'il a écrit dans STDERR.

Au lieu de la redirection, vous pouvez diriger vers teesi vous avez besoin d'une sortie pour continuer à l'écran ainsi que dans un fichier. Voir /programming//q/692000/477035


15
J'utilise généralement une variante de l'option 3: program | grep .imprime STDOUT en rouge.
Dennis

L'impression en rouge est à peu près exactement ce que je cherchais. Merci RedGrittyBrick & Dennis
Rauffle

7

Sur la base de votre demande commentée:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
Semble impressionnant. Mais voudriez-vous ajouter les cerises à votre arbre et expliquer ce qu'il fait? Tout le monde ici n'est pas un gourou - et votre construction est assez complexe;)
Izzy

Les supports sont à commander. J'ai en fait obtenu cette forme exacte de I-oubliez-où, mais le point est d'utiliser des descripteurs de fichiers supplémentaires (au-delà de 1 = stdoutet 2 = stderr) pour prendre la sortie de l'ensemble interne de crochets, et exécuter stdoutune sedcommande, tout en stderrpassant par un autre.
zebediah49

Sensationnel. Je ne savais pas utiliser ces descripteurs supplémentaires. D'abord, j'étais un peu confus (j'aime comprendre ce que je cours - et je me suis un peu confondu avec les accolades). Mais maintenant, c'est clair - et à mon humble avis, exactement ce que le PO voulait. Donc +1 de ma part :)
Izzy

Cela m'a aidé. Je voulais ajouter plus de données dans stderr. Cela fait cela et renvoie correctement tout sur stdout / stderr. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery

0

Vous pouvez simplement rediriger stderr vers un fichier et si quelque chose apparaît, c'est de stderr.

par exemple ls -a 2> ls-all.txt

s'il y a eu une erreur pour quelque raison que ce soit envoyée à stderr, elle sera redirigée vers ce fichier.


-1

Si vous voulez le faire une fois, redirigez l'un d'entre eux ailleurs.

Exemple, rediriger la sortie standard avec >.

ls -al> ls-l.txt (toute sortie ici ne provient pas de stdout, si vous voyez quelque chose, il doit s'agir d'une sortie stderr)

Pour la redirection stderr 2>


Le processus crée un flux constant de sortie, certains pour stdout certains pour stderr. Je veux déterminer lequel est lequel, car cette sortie va à l'écran
Rauffle
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.