Gracias por el help -m setdato. Eso funciona. Intenté man setantes de preguntar, sin embargo, en Ubuntu hayNo manual entry for set
Ole
2
@Ole, setestá integrado en bash, así que si puedes man bashencontrarlo en la sección SHELL BUILTIN COMMANDS. Al ver la página del manual es probable que pueda saltar a él mediante la búsqueda de esta expresión regular: \bset \[.
Usuario5910
Respuestas:
365
set -xhabilita un modo de shell donde todos los comandos ejecutados se imprimen en el terminal. En su caso, se usa claramente para la depuración, 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.
¡Esto es MUY útil! Desearía que alguien me lo hubiera dicho antes. ¿Hay otros trucos interesantes como este que puedan aumentar nuestra meta-habilidad en el script?
Estudiante
77
@ Estudiante: set -een la parte superior de su secuencia de comandos hará que la secuencia de comandos salga con un error cada vez que se produce un error (y no se maneja explícitamente). Me parece inmensamente preferible al valor predeterminado, que es seguir adelante de todas formas (como el infame de Visual Basic On Error Resume Next).
John Zwinck
1
@JohnZwinck, desafortunadamente, set -etiene efectos secundarios muy indeseables, hasta el punto de que hace que la revisión del código sea casi imposible (porque el comportamiento de una línea determinada depende de lo que está en la pila de llamadas; si una función se llama en un contexto "verificado", set -eestá deshabilitada para esa invocación y todo lo que a su vez llama). Vea los ejercicios en BashFAQ # 105 .
Charles Duffy
78
set -x
Imprime una traza de comandos simples, para comandos, comandos de caso, comandos de selección y aritmética para comandos y sus argumentos o listas de palabras asociadas después de que se expanden y antes de que se ejecuten. El valor de la variable PS4 se expande y el valor resultante se imprime antes del comando y sus argumentos expandidos.
El ejemplo anterior ilustra el uso de set -x. Cuando se usa, la expresión aritmética anterior se ha expandido. Podríamos ver cómo se evaluó una sola línea paso a paso.
Es posible que su script haya estado imprimiendo algunas líneas de información adicionales cuando el modo de ejecución se seleccionó como DEBUG. Tradicionalmente, las personas solían habilitar el modo de depuración cuando se llamaba un script con argumento opcional como-d
-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 envíe la información.
-x: inactivo por defecto. Si está activado, el contenido del comando se mostrará antes de que se ejecute el comando (después de la resolución variable, hay un símbolo ++).
Compare las siguientes diferencias:
/# set -v && echo $HOME/root
/# set +v && echo $HOMEset+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
help -m set | less
help -m set
dato. Eso funciona. Intentéman set
antes de preguntar, sin embargo, en Ubuntu hayNo manual entry for set
set
está integrado en bash, así que si puedesman bash
encontrarlo en la sección SHELL BUILTIN COMMANDS. Al ver la página del manual es probable que pueda saltar a él mediante la búsqueda de esta expresión regular:\bset \[
.Respuestas:
set -x
habilita un modo de shell donde todos los comandos ejecutados se imprimen en el terminal. En su caso, se usa claramente para la depuración, que es un caso de uso típico paraset -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 +x
lo deshabilitafuente
set +x
deshabilita.set -e
en la parte superior de su secuencia de comandos hará que la secuencia de comandos salga con un error cada vez que se produce un error (y no se maneja explícitamente). Me parece inmensamente preferible al valor predeterminado, que es seguir adelante de todas formas (como el infame de Visual BasicOn Error Resume Next
).set -e
tiene efectos secundarios muy indeseables, hasta el punto de que hace que la revisión del código sea casi imposible (porque el comportamiento de una línea determinada depende de lo que está en la pila de llamadas; si una función se llama en un contexto "verificado",set -e
está deshabilitada para esa invocación y todo lo que a su vez llama). Vea los ejercicios en BashFAQ # 105 .set -x
[ fuente ]
Ejemplo
El ejemplo anterior ilustra el uso de
set -x
. Cuando se usa, la expresión aritmética anterior se ha expandido. Podríamos ver cómo se evaluó una sola línea paso a paso.expr
ha sido evaluado.echo
ha sido evaluado.Para saber más sobre set → visite este enlace
cuando se trata de su script de shell,
Es posible que su script haya estado imprimiendo algunas líneas de información adicionales cuando el modo de ejecución se seleccionó como
DEBUG
. Tradicionalmente, las personas solían habilitar el modo de depuración cuando se llamaba un script con argumento opcional como-d
fuente
Compare las siguientes diferencias:
fuente