¿Cómo puedo hacer que "bash -x" (modo de depuración) sea recurrente en scripts de origen?

¿Cómo puedo hacer que "bash -x" (modo de depuración) sea recurrente en scripts de origen?

Estoy intentando depurar qué hace bash al inicializar el inicio de sesión para Linux. He leído que "bash -x" hará que bash imprima lo que está haciendo, pero no imprime comandos en archivos fuente como lo hace "set -x". No puedo usar "set -x" porque la inicialización se ejecuta antes de que pueda llamarlo. "bash -x" parece repetirse bien en OS X, pero eso podría deberse a las versiones de bash.

Linux: 3.2.25

OS X: 3.2.48

Aquí hay un extracto del comportamiento no recurrente en Linux:

bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...

Observe cómo se obtiene /etc/profile.d/vim.sh, pero sus comandos no se imprimen. ¿Existe alguna solución sin actualizar? ¿Esto se debe a la diferencia de versión?

Respuesta1

set -xalgún lugar del archivo raíz (el que requiere todos los demás archivos) debería funcionar. Alternativamente, introduzca algo como [[ !-z "$DEBUG" ]] && set -xen cada archivo y llame con DEBUG=1 script.sh.

Respuesta2

Dado que está obteniendo scripts y no ejecutándolos, su primer comando en el script principal debe ser "set -x"

Ahora todos los scripts obtenidos se ejecutarán más en depuración. Recuerde que cuando obtiene un script, se ejecuta en su shell actual, por lo que si configura -x una vez, será válido para todos los scripts fuente.

información relacionada