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 examine files on Linux Linux provides very useful options for viewing file attributes, such as owners and permissions, as well as file content. By Sandra Henry Stocker Oct 24, 2024 6 mins Linux how-to 8 easy ways to reuse commands on Linux Typing the same command again and again can become tiresome. Here are a number of ways you can make repeating commands – or repeating commands but with some changes – a lot easier than you might expect. By Sandra Henry-Stocker Oct 15, 2024 5 mins Linux news SUSE Edge upgrade targets Kubernetes and Linux at the edge SUSE Edge 3.1 includes a new stack validation framework and an image builder tool that are aimed at improving the scalability and manageability of complex Kubernetes and Linux edge-computing deployments. By Sean Michael Kerner Oct 15, 2024 6 mins Edge Computing Linux Network Management Software how-to Lesser-known xargs command is a versatile time saver Boost your Linux command line options and simplify your work with xargs, a handy tool for a number of data manipulation tasks. By Sandra Henry Stocker Oct 11, 2024 6 mins Linux PODCASTS VIDEOS RESOURCES EVENTS NEWSLETTERS Newsletter Promo Module Test Description for newsletter promo module. Please enter a valid email address Subscribe