I have a bash script myscript.sh
, which has a bunch of functions inside. To run one function, I would write
source myscript.sh; myfunction
How debug such a function?
Just add these line before section you want to debug.
set -v -x -e
and to disable it.
set +v +x +e
enable debugging in your script and output debugging for functions with functrace
.
set -x
set -o functrace
You should also in Bash be able to use:
$ set -xT
which enables function trace and
$ set +xT
to disable.
Also, with reference to another posted answer, I don't recommend using -v for debugging (verbose mode) unless you are checking a script/set of shell commands for syntax. One other (general) solution that is sometimes useful is making use of the -n
option in conjunction with -x
. This will "run" a script/commands without actually doing the last step of running a command. This can often let you pick up difficult errors in shell expansions and the like without causing unwanted mayhem.