Como posso redirecionar a mesma mensagem para stdoud e stderr (sem objeto temporário)

0

É fácil redirecionar stdout ou stderr para a mesma saída (arquivo ou uma das 2 saídas padrão) com 1>&1 , >&2 e / ou >file . Existe uma maneira de enviar a mesma saída para a saída std no KSH (como o arquivo | tee mas com & 2 como arquivo)? Eu tento ter o fluxo para stdout e stderr ao mesmo tempo (duplicar a saída, um em cada canal), mas sem usar o objeto temporário (variável ou arquivo)

Eu uso uma variável temporária, mas tento evitar isso

Tempo="$(
   #all my code with output to stdout and stderr
   )"
echo "${Tempo}"
echo "${Tempo}" >&2

Pergunta feita em StackOverflow com sugestão para perguntar aqui

    
por NeronLeVelu 10.11.2014 / 14:14

2 respostas

2

Se o seu sistema não tiver /dev/stderr , você poderá usar perl dessa maneira:

{
  your-code
  ..
} | perl -pe 'print STDERR'

perl processa a entrada uma linha por vez, portanto você não verá linhas parciais. Por exemplo, com código como:

printf 'Foo'; sleep 2; printf 'Bar\n'

Você só verá FooBar após 2 segundos.

Observe também que alguns comandos armazenam em buffer sua saída quando ela não vai para um terminal, então isso pode afetar o modo como a saída é feita.

    
por 10.11.2014 / 15:05
2

Eu não sei se ksh tem um recurso para fazer isso. zsh pode fazer isso (com o recurso multios ).

Mas existe uma maneira com tee :

echo foo | tee /dev/stderr
echo foo | tee /proc/self/fd/2
    
por 10.11.2014 / 14:32