Options are settings that change shell and/or script behavior.
The set command enables options within a script. At the point in the script where you want the options to take effect, use set -o option-name or, in short form, set -option-abbrev. These two forms are equivalent.
1 #!/bin/bash 2 3 set -o verbose 4 # Echoes all commands before executing. 5 |
1 #!/bin/bash 2 3 set -v 4 # Exact same effect as above. 5 |
To disable an option within a script, use set +o option-name or set +option-abbrev. |
1 #!/bin/bash 2 3 set -o verbose 4 # Command echoing on. 5 command 6 ... 7 command 8 9 set +o verbose 10 # Command echoing off. 11 command 12 # Not echoed. 13 14 15 set -v 16 # Command echoing on. 17 command 18 ... 19 command 20 21 set +v 22 # Command echoing off. 23 command 24 25 exit 0 26 |
An alternate method of enabling options in a script is to specify them immediately following the #! script header.
1 #!/bin/bash -x 2 # 3 # Body of script follows. 4 |
It is also possible to enable script options from the command line. Some options that will not work with set are available this way. Among these are -i, force script to run interactive.
bash -v script-name
bash -o verbose script-name
The following is a listing of some useful options. They may be specified in either abbreviated form (preceded by a single dash) or by complete name (preceded by a double dash or by -o).
Table 33-1. Bash options
Abbreviation | Name | Effect |
---|---|---|
-B | brace expansion | Enable brace expansion (default setting = on) |
+B | brace expansion | Disable brace expansion |
-C | noclobber | Prevent overwriting of files by redirection (may be overridden by >|) |
-D | (none) | List double-quoted strings prefixed by $, but do not execute commands in script |
-a | allexport | Export all defined variables |
-b | notify | Notify when jobs running in background terminate (not of much use in a script) |
-c ... | (none) | Read commands from ... |
checkjobs | Informs user of any open jobs upon shell exit. Introduced in version 4 of Bash, and still "experimental." Usage: shopt -s checkjobs (Caution: may hang!) | |
-e | errexit | Abort script at first error, when a command exits with non-zero status (except in until or while loops, if-tests, list constructs) |
-f | noglob | Filename expansion (globbing) disabled |
globstar | globbing star-match | Enables the ** globbing operator (version 4+ of Bash). Usage: shopt -s globstar |
-i | interactive | Script runs in interactive mode |
-n | noexec | Read commands in script, but do not execute them (syntax check) |
-o Option-Name | (none) | Invoke the Option-Name option |
-o posix | POSIX | Change the behavior of Bash, or invoked script, to conform to POSIX standard. |
-o pipefail | pipe failure | Causes a pipeline to return the exit status of the last command in the pipe that returned a non-zero return value. |
-p | privileged | Script runs as "suid" (caution!) |
-r | restricted | Script runs in restricted mode (see Chapter 22). |
-s | stdin | Read commands from stdin |
-t | (none) | Exit after first command |
-u | nounset | Attempt to use undefined variable outputs error message, and forces an exit |
-v | verbose | Print each command to stdout before executing it |
-x | xtrace | Similar to -v, but expands commands |
- | (none) | End of options flag. All other arguments are positional parameters. |
-- | (none) | Unset positional parameters. If arguments given (-- arg1 arg2), positional parameters set to arguments. |