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.