redireciona uma linha bash para stdout / terminal vs log

1

Eu tenho um script bash no qual estou redirecionando a saída para um arquivo para registro.

if test -t 1; then
    # stdout is a terminal
    exec > $OUTPUT_FILE 2>&1
else
    # stdout is not a terminal, no logging.
    false     
fi 

Eu tenho um ponto depois, onde eu realmente preciso de saída para ir para stdout. Existe uma maneira de substituir apenas uma chamada para forçar isso?

echo test 1>
    
por veilig 24.06.2014 / 18:18

1 resposta

3

Você pode colocar esta linha mais cedo no seu script:

exec 3>&1

Então, sempre que você precisar enviar algo para o stdout:

echo "this goes to stdout" 1>&3

Limpeza:

exec 1>&3
echo "now goes to normal stdout"
exec 3>&-  #to remove fd3

Como isso funciona é que você define um novo descritor de arquivo, 3, e ele aponta para o mesmo lugar que o stdout. Você então redireciona o stdout conforme necessário, mas o fd3 permanece o mesmo do que era (que é o seu terminal). Quando estiver pronto, basta remover o fd3!

Editar:

Se você deseja que a saída goto seu arquivo e "stdout clássico", faça isso:

echo "goes both places" | tee -a $OUTPUT_FILE 1>&3
    
por 24.06.2014 / 18:32