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