Em muitas variantes do Unix, você pode acessar a saída padrão através do nome do arquivo /dev/stdout
, assim:
if [[ -z $EVENT_LOGGER ]]; then
EVENT_LOGGER=/dev/stdout
fi
…
echo >>"$EVENT_LOGGER" 'This is a log message'
No entanto, não tenho certeza se está disponível no AIX. Consulte Portabilidade de "> / dev / stdout" e Sistemas Unix sem / dev / stdin, / dev / stdout e / dev / stderr?
Como alternativa, mantenha todos os registros em stdout e, opcionalmente, redirecione o stdout para um arquivo. Se você chamar o exec
construído sem nome de comando, mas com redirecionamentos, isso definirá os redirecionamentos para o restante do script.
if [[ -n $EVENT_LOGGER ]]; then
exec >>"$EVENT_LOGGER"
fi
…
echo 'This is a log message'
Observe que a saída de programas chamados pelo script irá para o mesmo arquivo de log. Se você não quiser isso, faça o registro em outro descritor de arquivo.
if [[ -n $EVENT_LOGGER ]]; then
exec 3>>"$EVENT_LOGGER"
else
exec 3>&1
fi
…
echo >&3 'This is a log message'
Ainda outra abordagem é definir uma função de maneiras diferentes dependendo do que é desejado.
if [[ -n $EVENT_LOGGER ]]; then
log () {
echo "$*" >>"$EVENT_LOGGER"
}
else
log () {
echo "$*"
}
fi
…
log 'This is a log message'
Não importa o que você faça, recomendo usar uma função. Dessa forma, se você quiser alterar a forma como o log funciona (por exemplo, para o terminal e para um arquivo, adicionar cores, torná-lo condicional, ...), será muito mais fácil.
Algumas notas gerais:
- O teste
-f
testa se existe um arquivo. Este não é um bom teste aqui. Em vez disso, teste se a variável não estiver vazia, com-n
(-z
testa se está vazia). - Você não pode colocar espaços ao redor do sinal
=
em uma atribuição de variável.