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 How to find files on Linux There are many options you can use to find files on Linux, including searching by file name (or partial name), age, owner, group, size, type and inode number. By Sandra Henry Stocker Jun 24, 2024 8 mins Linux opinion Linux in your car: Red Hat’s milestone collaboration with exida With contributions from Red Hat and critical collaborators, the safety and security of automotive vehicles has reached a new level of reliability. By Sandra Henry Stocker Jun 17, 2024 5 mins Linux how-to How to print from the Linux command line: double-sided, landscape and more There's a lot more to printing from the Linux command line than the lp command. Check out some of the many available options. By Sandra Henry Stocker Jun 11, 2024 6 mins Linux how-to Converting between uppercase and lowercase on the Linux command line Converting text between uppercase and lowercase can be very tedious, especially when you want to avoid inadvertent misspellings. Fortunately, Linux provides a handful of commands that can make the job very easy. By Sandra Henry Stocker Jun 07, 2024 5 mins Linux PODCASTS VIDEOS RESOURCES EVENTS NEWSLETTERS Newsletter Promo Module Test Description for newsletter promo module. Please enter a valid email address Subscribe