How to debug/trace bash function?

5,115

Solution 1

Just add these line before section you want to debug.

set -v -x -e

and to disable it.

set +v +x +e

Solution 2

enable debugging in your script and output debugging for functions with functrace.

set -x
set -o functrace

Solution 3

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.

Share:
5,115
Dims
Author by

Dims

Software developer & Machine Learning engineer C/C++/Java/C#/Python/Mathematica/MATLAB/Kotlin/R/PHP/JavaScript/SQL/HTML/ LinkedIn: http://www.linkedin.com/in/dimskraft Telegram: https://t.me/dims12 I prefer fishing rod over fish.

Updated on September 18, 2022

Comments

  • Dims
    Dims over 1 year

    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?