Estoy escribiendo un script que debe ejecutarse usando source
, porque su tarea es modificar el entorno. Durante el script, quiero usarlo set -e
para que cualquier error detenga el script. El guión se ve así:
#!/bin/bash
set -e
# do something
cd somewhere
source anotherScript
El problema es que, set -e
naturalmente, permanece vigente una vez que finaliza el script. ¿Cómo puedo asegurarme de que la set
opción alterada se restaure correctamente a su valor anterior cuando el script se detiene (de alguna manera, ya sea completando con éxito o en caso de error)?
bash
script
bash-scripting
Petr Pudlák
fuente
fuente
-x
/xtrace
) en Suprimir rastreo de ejecución para comando echo?Respuestas:
Exactamente de la misma manera que lo activas: llamando al buitin
set
:Desde la página de
bash(1)
manual, debajo de laSHELL BUILTIN COMMANDS
sección, comando `set ':fuente
set -o
para conocer su configuración actual. Sea explícito al configurar / desarmar cualquiera de ellos en sus scripts.El comando
set +o
enumera la configuración actual como comandos que restauran el mismo estado, p. Ej.Puede restaurar fácilmente todas las opciones más adelante, si guarda esta salida en una variable de shell:
Bash también incluye una serie de opciones no estándar (no POSIX) que se ajustan mediante el
shopt
comando. El comandoshopt -p
se puede usar para guardar estas opciones de manera similar.Si solo desea guardar y restaurar una opción, puede usar la variable de entorno $ -, que enumera el conjunto actual de opciones como letras, p. Ej.
Podría usar algo como esto para guardar y restaurar una opción en particular:
fuente
Use una trampa de RETORNO
RETURN
las trampas también funcionan para scripts de origen.main_script.sh
a_script_to_be_sourced.sh
Prueba
fuente
La restauración de configuraciones activadas anteriores se puede hacer rápidamente como:
Al revés (restaurar al estado apagado) AFAIK no existe un atajo y la respuesta de Seppo cubre todos los casos.
fuente
-bash: set: -i: invalid option
porque la-i
bandera observa un shell interactivo.