Estoy escribiendo un script que debe ejecutarse usando source, porque su tarea es modificar el entorno. Durante el script, quiero usarlo set -epara 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 -enaturalmente, permanece vigente una vez que finaliza el script. ¿Cómo puedo asegurarme de que la setopció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 COMMANDSsección, comando `set ':fuente
set -opara conocer su configuración actual. Sea explícito al configurar / desarmar cualquiera de ellos en sus scripts.El comando
set +oenumera 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
shoptcomando. El comandoshopt -pse 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
RETURNlas 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 optionporque la-ibandera observa un shell interactivo.