¿Hay una manera fácil de registrar toda la actividad que hace un script de shell?

17

¿Existe una manera fácil de registrar toda la actividad que ocurre desde un script de shell a un archivo?

Tengo un script. Emite cosas como "instrucciones" de eco, así como otras salidas de programa. Conozco los comandos:

command | tee -a "$log_file"

y

command >> logifle.log

Lo que estoy preguntando es si hay un parámetro de shell para el registro, o un comando de conjunto que puedo usar o algo así. No necesariamente quiero agregar docenas de redirecciones o tee a los archivos si no es necesario. Todavía quiero obtener una salida estándar, solo quiero que se registre .:wq

    
pregunta j0h 30.07.2015 - 16:17

2 respuestas

17

si normalmente ejecuta el script con foo.sh , intente ejecutarlo (suponiendo que sea un script bash) con bash -x foo.sh . Si quieres que todo se redireccione al archivo, prueba bash -x foo.sh > file.log 2>&1 (nota que también estoy redireccionando a stderr, elimina el 2>&1 si no quieres esto). Si también quieres ver lo que está sucediendo, bash -x foo.sh 2>&1 | tee log.file .

    
respondido por el roadmr 30.07.2015 - 16:24
18

Hay una manera muy fácil y práctica:

Usar script para hacer una mecanografía de sesión de terminal

  1. Comience el comando script

    Si se da el argumento file , por ejemplo, script ~/tmp/output , script guarda el diálogo en este archivo. Si no se proporciona ningún nombre de archivo, el diálogo se guarda en el archivo typescript

  2. Comience su script o lo que sea que quiera comenzar

  3. Si su script ha finalizado, detenga script mediante Ctrl - D

  4. Verifique el resultado en el archivo de salida predeterminado typescript

Para iniciar el comando en un solo paso con script , use el parámetro -c

-c COMMAND
    Run the COMMAND rather than an interactive 
    shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

El uso de script dentro de su script no tiene sentido porque script teje el shell o inicia un nuevo shell.

  

Si la variable SHELL existe, el shell bifurcado por script será ese shell. Si SHELL no está configurado, se supone el shell Bourne. (La mayoría de las shells configuran esta variable automáticamente).

    
respondido por el A.B. 30.07.2015 - 16:28

Lea otras preguntas en las etiquetas