Estou escrevendo um script que precisa ser executado usando source
, porque sua tarefa é modificar o ambiente. Durante o script, quero usar set -e
para que qualquer erro pare o script. O script fica assim:
#!/bin/bash
set -e
# do something
cd somewhere
source anotherScript
O problema é que, set -e
naturalmente, permanece em vigor após a conclusão do script. Como posso garantir que a set
opção alterada seja restaurada adequadamente ao seu valor anterior quando o script for interrompido (de alguma forma - seja com êxito ou com erro)?
bash
script
bash-scripting
Petr Pudlák
fonte
fonte
-x
/xtrace
) é abordado em Suprimir rastreamento de execução para o comando echo?Respostas:
Exatamente da mesma maneira que você a ativa: chamando o buitin
set
:Na página de
bash(1)
manual, naSHELL BUILTIN COMMANDS
seção, comando `set ':fonte
set -o
para conhecer sua configuração atual. Seja explícito ao definir / desabilitar qualquer um deles em seus scripts.O comando
set +o
lista as configurações atuais como comandos que restauram o mesmo estado, por exemploVocê pode restaurar facilmente todas as opções posteriormente, se salvar esta saída em uma variável do shell:
O Bash também inclui várias opções não padrão (não POSIX) que são ajustadas usando o
shopt
comando O comandoshopt -p
pode ser usado para salvar essas opções de maneira semelhante.Se você deseja salvar e restaurar apenas uma opção, pode usar a variável de ambiente $, que lista o conjunto de opções atual como letras, por exemplo
Você pode usar algo assim para salvar e restaurar uma opção específica:
fonte
Use uma armadilha RETURN
RETURN
armadilhas também funcionam para scripts de origem.main_script.sh
a_script_to_be_sourced.sh
Teste
fonte
A restauração das configurações ativadas anteriores pode ser feita rapidamente como:
Ao contrário (restaurar para o estado desativado), AFAIK não existe um atalho e a resposta do Seppo abrange todos os casos.
fonte
-bash: set: -i: invalid option
porque o-i
sinalizador observa um shell interativo.