Digamos que eu tenha um script Zsh e que gostaria de deixá-lo imprimir STDOUT
, mas também copie (despejo) sua saída para um arquivo em disco.
Além disso, o script começa com a seguinte opção
set -o xtrace
o que força a ser detalhado e imprimir os comandos que executa. Gostaria de capturar essa saída também em um arquivo em disco.
Meu entendimento é que se eu fizer
./my_script.sh > log.txt
será apenas enviado STDOUT
para log.txt
, mas e se eu também quiser ver a saída no terminal?
Eu li sobre tee
e a MULTIOS
opção no Zsh, mas não sei como usá-los.
Quando eu faço:
./my_script | tee log.txt
Eu posso ver a saída no terminal, mas o arquivo não log.txt
parece estar capturando tudo (na verdade, ele captura quase nada).
shell-script
zsh
io-redirection
pipe
output
Amelio Vazquez-Reina
fonte
fonte
./my_script.sh > log.txt 2>&1
script
comando. Ou talvezmyscript >&1 > log.txt 2>&1
Respostas:
Pode ser que o seu script esteja produzindo saída para
stdout
estderr
, e você esteja obtendo apenas uma dessas correntes no arquivo de log../my_script.sh | tee log.txt
realmente enviará tudo para o terminal, mas somente será despejadostdout
no arquivo de log../my_script.sh > log.txt 2>&1
fará o contrário, despejando tudo no arquivo de log, mas não exibindo nada na tela.O truque é combinar os dois com
tee
:Isso redireciona
stderr
(2
) parastdout
(1
) e, em seguida, canalizastdout
paratee
, o que o copia no terminal e no arquivo de log.O
zsh
equivalente multios seria:Ou seja, redirecione o stdout para o stdout original e para o log.txt (internamente por meio de um canal para algo que funcione como esse
tee
) e, em seguida, redirecione o stderr para ele também (para o canal para otee
processo interno ).fonte
./myscript.sh >&1 2>&1 > log.txt
? (ou seja, alternando a ordem dos dois últimos redirecionamentos). Haveria alguma diferença entre eles?stdout
, apenas paralog.txt
. A última linha da resposta (adicionada por @ StéphaneChazelas e não por mim) é exibida para ambos.o nohup permite que um trabalho continue, mesmo que o console morra ou esteja fechado, útil para backups prolongados, etc., mas aqui estamos usando o log automático.
fonte