Chapter 31. Options

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       

Note

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 or by complete name.


Table 31-1. Bash options

AbbreviationNameEffect
-CnoclobberPrevent overwriting of files by redirection (may be overridden by >|)
-D(none)List double-quoted strings prefixed by $, but do not execute commands in script
-aallexportExport all defined variables
-bnotifyNotify when jobs running in background terminate (not of much use in a script)
-c ...(none)Read commands from ...
-fnoglobFilename expansion (globbing) disabled
-iinteractiveScript runs in interactive mode
-pprivilegedScript runs as "suid" (caution!)
-rrestrictedScript runs in restricted mode (see Chapter 21).
-unounsetAttempt to use undefined variable outputs error message, and forces an exit
-vverbosePrint each command to stdout before executing it
-xxtraceSimilar to -v, but expands commands
-eerrexitAbort script at first error (when a command exits with non-zero status)
-nnoexecRead commands in script, but do not execute them (syntax check)
-sstdinRead commands from stdin
-t(none)Exit after first command
-(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.