Sign up ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm writing a script that needs to be executed using source, because its task is to modify the environment. During the script, I want to use set -e so that any error stops the script. The script looks like this:

set -e
# do something
cd somewhere
source anotherScript

The problem is that set -e naturally remains in effect after the script finishes. How can I ensure that the altered set option is properly restored to its prevous value when the script stops (in any way - either by completing successfully or on an error)?

share|improve this question

2 Answers 2

up vote 2 down vote accepted

Exactly the same way you activate it: calling the buitin set:

$ set -o errexit
$ set -o | grep errexit
errexit         on
$ set +o errexit
$ set -o | grep errexit
errexit         off

From the bash(1) manpage, under the SHELL BUILTIN COMMANDS section, `set' command:

-o option-name
The option-name can be one of the following:
    errexit Same as -e.
share|improve this answer
Is there a way how to save (all) these settings and restore them later? – Petr Pudlák Sep 21 '13 at 10:04
Run set -o to known your current setup. Be explicit when setting/unsetting any of them on your scripts. – dawud Sep 21 '13 at 10:12

The command set +o lists the current settings as commands that restore the same state, e.g.

$ set +o
set +o allexport
set -o braceexpand
set -o emacs
set +o errexit
set +o errtrace

You can easily restore all the options later, if you save this output to a shell variable:

set -e
# do something

Bash includes also a number of non-standard (not POSIX) options that are adjusted using shopt command. The command shopt -p can be used to save these options in a similar fashion.

If you only want to save and restore one options, you can use the $- environment variable, which lists the current set of options as letters, e.g.

$ echo $-

You could use something like this to save and restore a particular option:

[[ $- = *e* ]]
set -e
# do something
(( $SAVED_ERREXIT )) && set +e
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.