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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.