maneira segura de redirecionar alguma saída usando exec

0

Eu tenho um script que é bastante "barulhento". Fui solicitado a limpar a saída para que a maior parte da saída do script fosse para um arquivo de log, e o usuário apenas visualizasse a mensagem de inicialização e a mensagem quando o script fosse encerrado. Para fazer isso, estou usando exec assim:

#! /bin/bash
echo "Welcome! set up has begun, this may take a few moments..."
exec 3>&1 4>&2 1>> script.log 2>&1
# Call a bunch of other programs - stderr and stdout must
# be written to a log file to diagnose programs, but nothing out the console...
exec 1>&3 2>&4
echo "Your system is ready to use!"

Estou preocupado, porém, com o que acontecerá se um dos programas dentro da parte registrada desse script falhar (não tenho muito controle sobre esses programas) e causar falha no script principal. Se a linha exec 1>&3 2>&4 não conseguir executar, estou preocupado que o usuário possa acabar com stderr e stdout redirecionado, deixando seu terminal inutilizável! Existe uma maneira mais segura de lidar com isso?

    
por FrustratedWithFormsDesigner 03.09.2015 / 17:52

1 resposta

2

Se o script for executado como um programa separado, qualquer redirecionamento não sobreviverá ao final do processo; eles se aplicam apenas ao /bin/bash yourscript.sh implícito, não ao shell interativo que o usuário está executando. Este é o caso normal. A única maneira de causar um problema é se o script foi lido usando source yourscript.sh ou similar, o que você normalmente não deveria fazer.

    
por 03.09.2015 / 17:54