如何正确调试bash脚本

Han*_*sky 0 linux 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
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它会吃掉我的变量.一些线索?

MLS*_*LSC 5

以下是一些建议:

  • 您可以随时在shell脚本中回显行以查看正在发生的事情.
  • 您还可以使用它set -xv来帮助您调试shell脚本.只需将其放在set -xv要调试的部件之前,set +xv然后关闭调试.您还可以使用export PS4="\$LINENO> "在shell脚本中打印行号.

以下是您的脚本的外观set -xv.这是调试shell脚本的一个非常好的工具.


Dav*_* W. 5

最好的方法是使用set -xv.在set -v执行前,将呼应一行.在set -x将输出的shell脚本之后的行内插在该行的变量和表达式.

作为其中的一部分,您还可以创建一个环境变量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
Run Code Online (Sandbox Code Playgroud)