Enviar copia de la salida de un script a un archivo

10

Digamos que tengo un script Zsh y que me gustaría dejar que imprima la salida STDOUT, pero también copiar (volcar) su salida a un archivo en el disco.

Además, el script comienza con la siguiente opción

set -o xtrace

lo que lo obliga a ser detallado e imprimir los comandos que ejecuta. Me gustaría capturar esta salida también en un archivo en el disco.

Entiendo que si lo hago

./my_script.sh > log.txt

solo se enviará STDOUTa log.txt, pero ¿qué sucede si también quiero ver la salida en el terminal?

He leído sobre teey la MULTIOSopción en Zsh, pero no estoy seguro de cómo usarlos.

Cuando lo hago:

./my_script | tee log.txt

Puedo ver la salida en el terminal, pero el archivo no log.txtparece estar capturando todo (de hecho, captura casi nada).

Amelio Vazquez-Reina
fuente
./my_script.sh > log.txt 2>&1
mikeserv
Parece que estás buscando el scriptcomando. O tal vezmyscript >&1 > log.txt 2>&1
Stéphane Chazelas

Respuestas:

12

Podría ser que su script esté produciendo resultados para stdouty stderr, y solo está obteniendo uno de esos flujos de salida en su archivo de registro.

./my_script.sh | tee log.txtde hecho enviará todo al terminal, pero solo volcará stdoutal archivo de registro.

./my_script.sh > log.txt 2>&1 hará lo contrario, volcará todo en el archivo de registro, pero no mostrará nada en la pantalla.

El truco es combinar los dos con tee:

./myscript.sh 2>&1 | tee log.txt

Esto redirige stderr( 2) a stdout( 1), luego se canaliza stdouta tee, que lo copia al terminal y al archivo de registro.

El zshequivalente multios sería:

./myscript.sh >&1 > log.txt 2>&1

Es decir, redirija stdout tanto al stdout original como a log.txt (internamente a través de una tubería a algo que funcione tee), y luego redirija stderr a eso también (a la tubería al teeproceso interno ).

savanto
fuente
Gracias. En cuanto a tu última línea, ¿por qué no ./myscript.sh >&1 2>&1 > log.txt? (es decir, cambiar el orden de las dos últimas redirecciones). ¿Habría alguna diferencia entre ellos?
Amelio Vazquez-Reina
Su variante no sale stdout, solo a log.txt. La última línea en la respuesta (agregada por @ StéphaneChazelas y no yo) sale a ambos.
savanto
0

nohup permite que un trabajo continúe incluso si la consola muere o está cerrada, útil para largas copias de seguridad, etc., pero aquí estamos usando su registro automático.

nohup myscript.sh & ; tail -f nohup.out
zzapper
fuente