Using the -x
flag will force Bash to output each line of the shell script you’re running before that line is executed. This can be useful for debugging.
bash -x ./script.sh
The -x
flag can also be incorporated into the interpreter line.
#!/usr/bin/env bash -x
# Script content...
Finally, this mode can be toggled on and off with the set
command within the script itself.
#!/usr/bin/env bash
# Some script content...
set -x
# These lines will be echoed before execution.
set +x
# These lines will not be echoed...
Frequently set -x
is used at the start of a script without a closing set +x
, which will just cause all lines of the script to be echoed back before execution.