Réponses:
Je ne connais que trois façons de déterminer ce qu'un programme va sortir sur STDOUT et quoi sur STDERR
Lisez la documentation. Ou
Expérimentez avec la redirection †
†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 tee
si vous avez besoin d'une sortie pour continuer à l'écran ainsi que dans un fichier. Voir /programming//q/692000/477035
Sur la base de votre demande commentée:
{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'
stdout
et 2 = stderr
) pour prendre la sortie de l'ensemble interne de crochets, et exécuter stdout
une sed
commande, tout en stderr
passant par un autre.
{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&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>
program | grep .
imprime STDOUT en rouge.