如何正确debugging一个bash脚本

我在bash脚本中使用下面的代码来追踪代码

#!/bin/bash function trace() { echo "TRACE" \ "${BASH_SOURCE[1]}:${BASH_LINENO[0]}:${FUNCNAME[1]}:" \ "$BASH_COMMAND" } set -o functrace shopt -s extdebug trap trace DEBUG # Remainder of code here exit 0 

但是当我运行它,它吃我的variables。 一些线索?

最好的方法是使用set -xvset -v在执行之前会回显一行。 在shell脚本插入该行中的变量和表达式后, set -x将输出该行。

作为其中的一部分,您还可以创建一个名为PS4的环境变量,这个变量将在您的shell脚本每次输出正在执行的行时被打印出来。 大多数人把它设置为像PS="\$LINENO: "这将打印出正在执行的行的行号。

完成后,可以通过设置set +xv关闭调试。

 # # Somewhere in this part of my script, I am having problems.... # export PS4="\$LINENO> " # Now, I'll see the line numbers while debugging set -xv # Debugging is turned on .... # # Done with debugging # set +xv # Debugging is turned off 

这里有几个建议:

  • 你总是可以在shell脚本中回显行,看看发生了什么。
  • 您也可以使用set -xv来帮助您调试一个shell脚本。 只需在要调试的部分之前放置set -xv ,并将set +xv为关闭调试即可。 您也可以使用export PS4="\$LINENO> "在shell脚本中输出行号。

以下是您的脚本将如何使用set -xv来查看。 这是一个非常好的调试shell脚本的工具。