Coder Perfect

What does `set -x` do?

Problem

I have a shell script with the following line in it:

[ "$DEBUG" == 'true' ] && set -x

Asked by Ole

Solution #1

set -x switches the shell to a mode where all commands are printed to the terminal. It’s evident that you’re using it for debugging, which is a common use case for set -x: showing every command as it’s executed might help you visualize the script’s control flow if it’s not working as anticipated.

set +x turns it off.

Answered by John Zwinck

Solution #2

[source]

set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30
set +x
echo `expr 10 + 20 `
30

The use of set -x is seen in the above example. The above mathematical expression has been expanded when it is employed. We were able to examine how a single line was evaluated one step at a time.

Visit this link to learn more about the set.

When it comes to your shell script, make sure it’s as simple as possible.

[ "$DEBUG" == 'true' ] && set -x

When the execution mode was set to DEBUG, your script may have printed some extra lines of information. When a script was called with an optional argument such as -d, people used to enable debug mode.

Answered by Raju

Solution #3

Consider the following distinctions:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET

Answered by lupguo

Solution #4

Instead of using set -x and set +x, we can use -x to run the script. ksh -x script name is one example. ksh If I’m mistaken, please correct me or expand my understanding.

Answered by Faisal

Post is based on https://stackoverflow.com/questions/36273665/what-does-set-x-do