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


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.