Cómo hacer eco de los comandos de Shell a medida que se ejecutan

Resuelto Jack Nock asked hace 14 años • 17 respuestas

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?

Jack Nock avatar May 18 '10 07:05 Jack Nock
Aceptado

set -xo set -o xtraceexpande las variables e imprime un pequeño signo + antes de la línea.

set -vo set -o verboseno expande las variables antes de imprimir.

Utilice set +xy set +vpara 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 setatributos y sobre depuración .

$ cat shl
#!/bin/bash                                                                     

DIR=/tmp/so
ls $DIR

$ bash -x shl 
+ DIR=/tmp/so
+ ls /tmp/so
$
Tom avatar May 18 '2010 00:05 Tom

set -xte 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
radman avatar May 18 '2010 00:05 radman