Como parar o redirecionamento no bash

8

Eu uso:

exec >script.log 2>&1

no meu script para redirecionar toda a saída para um arquivo. No final do script, gostaria de imprimir uma mensagem na tela. Como faço para parar o redirecionamento?

    
por Willem 28.06.2013 / 09:57

3 respostas

10

Você pode chamar exec novamente para restaurar os descritores originais. Você precisará salvá-los em algum lugar.

exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"

Dentro da parte registrada, você pode usar os descritores originais de um comando, redirecionando para os descritores extras.

echo "30 seconds remaining" >&3

Como alternativa, você pode colocar a parte registrada do seu script dentro de um comando composto e redirecionar esse comando composto. Isso não funciona se você quiser usar os descritores originais em uma armadilha em algum lugar dentro dessa parte redirecionada.

{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
    
por 29.06.2013 / 02:26
6

Use fd3 e 4 adicionais para stdout e stderr e simplesmente redirecione 1 e 2 para eles no final do seu script:

exec 3>&1 4>&2
exec >script.log 2>&1

echo "Some code"

exec >&3 2>&4
echo "Done"
    
por 28.06.2013 / 10:27
1

Primeiro, você deve verificar se você tem ou não um tty.

if tty -s; then
    echo "Hello, World" > $(tty)
fi
    
por 28.06.2013 / 10:20