redirigir toda la salida en un script bash cuando se utiliza set-x


Tengo un script bash que tiene set -x en él. ¿Es posible redirigir las impresiones de depuración de este script y toda su salida a un archivo? Idealmente me gustaría hacer algo como esto:

#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"

Y obtener el

+ echo test
test

Salida en /tmp/mylog, no en stdout.

Author: Thanos, 2012-06-27

2 answers

Esto es lo que acabo de buscar en Google y me recuerdo a mí mismo usando esto hace algún tiempo...

Use exec para redirigir tanto la salida estándar como el error estándar de todos los comandos en un script:

#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1

Para más magia de redirección echa un vistazo a Guía Avanzada de Scripting Bash - Redirección de E/S.

Si también desea ver la salida y depurar en el terminal en adición en el archivo de registro, consulte redirigir la COPIA de salida estándar al archivo de registro desde el script bash en sí mismo .

Si desea manejar el destino de la salida de seguimiento set -x independientemente de la salida normal STDOUT y STDERR, consulte bash que almacena la salida de set-x en el archivo de registro.

 47
Author: bcelary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:26

La salida -x va a stderr, así que para registrarla haga:

set -x
exec 2>/tmp/mylog
 13
Author: Petesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-27 15:14:39