Cómo hacer eco de los comandos de Shell a medida que se ejecutan
En un script de shell, ¿cómo hago eco de todos los comandos de shell llamados y expando los nombres de las variables?
Por ejemplo, dada la siguiente línea:
ls $DIRNAME
Me gustaría que el script ejecute el comando y muestre lo siguiente
ls /full/path/to/some/dir
El propósito es guardar un registro de todos los comandos del shell llamados y sus argumentos. ¿Existe quizás una mejor manera de generar dicho registro?
set -x
o set -o xtrace
expande las variables e imprime un pequeño signo + antes de la línea.
set -v
o set -o verbose
no expande las variables antes de imprimir.
Utilice set +x
y set +v
para desactivar las configuraciones anteriores.
En la primera línea del guión, se puede poner #!/bin/sh -x
(o -v
) para que tenga el mismo efecto que set -x
(o -v
) más adelante en el guión.
Lo anterior también funciona con /bin/sh
.
Consulte la wiki de bash-hackers sobre set
atributos y sobre depuración .
$ cat shl
#!/bin/bash
DIR=/tmp/so
ls $DIR
$ bash -x shl
+ DIR=/tmp/so
+ ls /tmp/so
$
set -x
te dará lo que quieres.
A continuación se muestra un script de shell de ejemplo para demostrarlo:
#!/bin/bash
set -x #echo on
ls $PWD
Esto expande todas las variables e imprime los comandos completos antes de la salida del comando.
Producción:
+ ls /home/user/
file1.txt file2.txt