Pode ser que o seu script esteja produzindo a saída para stdout
e stderr
, e você só está obtendo uma dessas saídas de fluxo para o seu arquivo de registro.
./my_script.sh | tee log.txt
, de fato, emitirá tudo para o terminal, mas só enviará stdout
para o arquivo de log.
./my_script.sh > log.txt 2>&1
fará o oposto, descartando tudo no arquivo de log, mas exibindo nada na tela.
O truque é combinar os dois com tee
:
./myscript.sh 2>&1 | tee log.txt
Isso redireciona stderr
( 2
) para stdout
( 1
) e, em seguida, canaliza stdout
para tee
, que copia para o terminal e para o log arquivo.
O zsh
multios equivalente seria:
./myscript.sh >&1 > log.txt 2>&1
Ou seja, redirecione o stdout para o stdout original e log.txt (internamente por meio de um canal para algo que funciona como tee
) e, em seguida, redirecione stderr para esse também (para o canal para o% internotee
semelhante ao processo).