¿Qué hace `set -x`?

Resuelto Ole asked hace 8 años • 3 respuestas

Tengo un script de shell con la siguiente línea:

[ "$DEBUG" == 'true' ] && set -x
Ole avatar Mar 29 '16 07:03 Ole
Aceptado

set -xhabilita un modo del shell donde todos los comandos ejecutados se imprimen en la terminal. En su caso, se usa claramente para depurar, que es un caso de uso típico para set -x: imprimir cada comando a medida que se ejecuta puede ayudarlo a visualizar el flujo de control del script si no funciona como se esperaba.

set +xlo desactiva.

John Zwinck avatar Mar 29 '2016 01:03 John Zwinck

$(conjunto -x)

Imprime un rastro de comandos simples, para comandos, comandos de mayúsculas y minúsculas, comandos de selección y aritmética para comandos y sus argumentos o listas de palabras asociadas después de expandirlos y antes de ejecutarlos. El valor de la variable PS4 se expande y el valor resultante se imprime antes del comando y sus argumentos expandidos.

[ fuente ]

Ejemplo

set -x
echo $(expr 10 + 20)
+ expr 10 + 20
+ echo 30
30

set +x
echo $(expr 10 + 20)
30

El ejemplo anterior ilustra el uso de set -x. Cuando se utiliza, la expresión aritmética anterior se ha ampliado. Pudimos ver cómo se ha evaluado paso a paso una sola línea.

  • El primer paso exprha sido evaluado.
  • El segundo paso echoha sido evaluado.

Para saber más sobre set → visita este enlace

cuando se trata de tu script de shell,

[ "$DEBUG" == 'true' ] && set -x

Es posible que su secuencia de comandos haya estado imprimiendo algunas líneas adicionales de información cuando el modo de ejecución se seleccionó como DEBUG. Tradicionalmente, la gente solía habilitar el modo de depuración cuando se llamaba un script con un argumento opcional como-d

Raju avatar Mar 29 '2016 07:03 Raju

-u: deshabilitado por defecto. Cuando se activa, se muestra un mensaje de error cuando se utiliza una variable no configurada.

-v: inactivo por defecto. Después de la activación, se mostrará el contenido original de la información (sin resolución variable) antes de que se emita la información.

-x: inactivo por defecto. Si está activado, el contenido del comando se mostrará antes de ejecutarlo (después de la resolución variable, hay un símbolo ++).

Compara las siguientes diferencias:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET
lupguo avatar Oct 28 '2019 10:10 lupguo