Credit: Gremlin / Getty Images The Linux set command allows you to change the value of shell options or to display the names and values of shell variables. Rarely used, it is a bash builtin, but is quite a bit more complicated than most builtins. If you use the command without any arguments, you will get a list of all the settings—the names and values of all shell variables and functions. Watch out though! You’ll end up with a torrent of output flowing down your screen. There are just short of 3,000 lines of output on my Fedora system: $ set | wc -l 2954 The top of the list looks like what you see below, but the output gets considerably more complicated as you move through it. $ set | head -10 BASH=/bin/bash BASHOPTS=cdspell:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=([0]="0") BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_VERSINFO=([0]="2" [1]="11") BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="5" [1]="1" [2]="0" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu") More practically, there are some very helpful things you can do with set. Let’s examine some of them. Debugging your scripts You can use the set -x command to do some script debugging. In other words, when you use this option, bash is going to show you a lot more output that displays what your script is up to. The script used in this example does a lot of checking and then prints the top lines of the selected file. #!/bin/bash set -x if [ $# -lt 2 ]; then echo “Usage: $0 lines filename” exit 1 fi if [ ! -f $2 ]; then echo “Error: File $2 not found” exit 3 else echo top of file head -$1 $2 fi msg="bye" echo $msg Without the set -x, the script would display output like this: $ script3 3 file top of file #!/bin/bash -x date bye With the set -x, it shows each command as it’s being run as well as the output. $ script3 3 file + ‘[‘ 2 -lt 2 ‘]’ + [[ 3 != [0-9]* ]] + ‘[‘ ‘!’ -f file ‘]’ + echo top of file top of file + head -3 file #!/bin/bash -x date + msg=bye + echo bye Bye You can also invoke debugging by placing the -x on the “shebang line” (i.e., the top line of the script) like this: #!/bin/bash -x One of the benefits of using set -x and then set +x is that the first set starts the debugging and the second set turns it off, so you can see the verbose output for a small section of a script if that is all you need to focus on. set -x if [ ! -f $2 ]; then echo “Error: File $2 not found” exit 3 else echo top of file head -$1 $2 fi set +x Other set options can be turned on and then off again in this same manner. Automatic exporting Using set -a, you can cause any variable or function that you create to be automatically exported so that subshells and scripts can use them. Here’s an example: $ set -a $ one=1 $ two=2 $ three=3 $ four=4 $ /bin/bash Exit immediately if a command fails The set -e command will cause a script to exit as soon as it runs into an error. In this example, the set -e command is invoked. $ cat script1 #!/bin/bash set -e cat nosuchfile echo “So long!” As you might suspect, the “nosuchfile” file doesn’t exist, so the script exits at that point with the help of set -e. The final echo command never gets a chance to run. $ script1 cat: nosuchfile: No such file or directory Don’t ignore non-existent variables By default, bash will ignore any variables that don’t exist. For example, in the script below, bash will overlook the fact that $var2 has not been defined and will simply display $var1. $ cat script1 #!/bin/bash var1="123" echo $var1 $var2 $ ./script1 123 If you add set -u to the script, it reports the problem. $ cat script2 #!/bin/bash set -u var1="123" echo $var1 $var2 $ ./script2 ./script1: line 5: var2: unbound variable Many additional set options are available, but these are some of the most useful. Related content how-to Compressing files using the zip command on Linux The zip command lets you compress files to preserve them or back them up, and you can require a password to extract the contents of a zip file. By Sandra Henry-Stocker May 13, 2024 4 mins Linux opinion NSA, FBI warn of email spoofing threat Email spoofing is acknowledged by experts as a very credible threat. By Sandra Henry-Stocker May 13, 2024 3 mins Linux how-to The logic of && and || on Linux These AND and OR equivalents can be used in scripts to determine next actions. By Sandra Henry-Stocker May 02, 2024 4 mins Linux how-to Using the apropos command on Linux By Sandra Henry-Stocker Apr 24, 2024 3 mins Linux PODCASTS VIDEOS RESOURCES EVENTS NEWSLETTERS Newsletter Promo Module Test Description for newsletter promo module. Please enter a valid email address Subscribe