programas - scripts bash ejemplos
Bash: ¿Imprime cada comando antes de ejecutar? (4)
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es la mejor manera de configurar un script bash que imprime cada comando antes de ejecutarlo?
Eso sería genial para propósitos de depuración.
Ya probé esto:
CMD="./my-command --params >stdout.txt 2>stderr.txt"
echo $CMD
`$CMD`
Lo que se supone que debe hacer es imprimir esto primero:
./my-command --params >stdout.txt 2>stderr.txt
y luego ejecute ./my-command --params
, con la salida redirigida a los archivos especificados.
La forma más fácil de hacer esto es dejar que bash
haga:
set -x
O ejecútelo explícitamente como bash -x myscript
.
set -x está bien, pero si haces algo como:
set -x;
command;
set +x;
resultaría en la impresión
+ command
+ set +x;
Puede usar una subshell para evitar eso, como:
(set -x; command)
que simplemente imprimiría el comando.
set -x
está bien.
Otra forma de imprimir cada comando ejecutado es usar trap
con DEBUG
. Pon esta línea al comienzo de tu script:
trap ''echo "# $BASH_COMMAND"'' DEBUG
Puede encontrar muchos otros usos de trap
here .
set -o xtrace
o
bash -x myscript.sh
Esto también funciona con estándar / bin / sh IIRC (podría ser una cosa de POSIX)
Y recuerde, hay bashdb ( bash Shell Debugger, release 4.0-0.4
)
Para volver a la normalidad, salga de la subshell o
set +o xtrace