Determine se a saída é stdout ou stderr

22

Como posso determinar se o que um processo está produzindo é stdout ou stderr?

Rauffle
fonte

Respostas:

22

Existem apenas três maneiras que eu conheço para determinar o que um programa produzirá para STDOUT e o que STDERR

  1. Leia a documentação. Ou

  2. Experimente o redirecionamento †

  3. imprimir STDERR em vermelho

†Por exemplo:

program > program.stdout 2> program.stderr

Em seguida, observe os dois arquivos de saída para ver o que o programa gravou em STDOUT e o que gravou em STDERR.

Em vez do redirecionamento, você pode canalizar teese precisar de saída para continuar na tela e também em um arquivo. Consulte /programming//q/692000/477035

RedGrittyBrick
fonte
15
Normalmente, uso uma variação da opção 3: program | grep .imprime STDOUT em vermelho.
Dennis
Imprimir em vermelho é exatamente o que eu estava procurando. Obrigado RedGrittyBrick & Dennis
Rauffle
7

Com base no seu pedido comentado:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'
zebediah49
fonte
3
Parece impressionante. Mas você se importaria de adicionar as cerejas à sua árvore e explicar o que está fazendo? Nem todo mundo por aqui é um guru - e sua construção é um pouco complexo bastante;)
Izzy
Os suportes são para pedidos. Na verdade, peguei a forma exata em I-forget-where, mas o objetivo é usar descritores de arquivo extras (além de 1 = stdoute 2 = stderr) para obter a saída do conjunto interno de colchetes e executar stdoutum sedcomando, enquanto stderrpercorre um diferente.
zebediah49
Uau. Não sabia usar esses descritores extras. Primeiro fiquei um pouco confuso (gosto de entender o que corro - e fiquei um pouco confuso com o aparelho). Mas agora está claro - e IMHO exatamente o que o OP queria. Então +1 de mim :)
Izzy
Isso me ajudou. Eu queria adicionar mais dados ao stderr. Isso é feito e gera tudo corretamente de volta no stdout / stderr. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
precisa
0

Você pode apenas redirecionar o stderr para um arquivo e, se algo aparecer nele, é do stderr.

por exemplo ls -a 2> ls-all.txt

se, por algum motivo, houver um erro enviado ao stderr, ele será redirecionado para este arquivo.

magna_nz
fonte
-1

Se você quiser fazer isso uma vez, redirecione um deles para outro lugar.

Exemplo, redirecionando o padrão com >.

ls -al> ls-l.txt (qualquer saída aqui não é do stdout, se você vê alguma coisa, deve ser a saída stderr)

Para redirecionamento stderr, use 2>

Hennes
fonte
O processo cria um fluxo constante de saída, alguns para stdout e outros para stderr. Eu quero determinar qual é qual como essa saída vai para a tela
Rauffle