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).