如何调试 bash 脚本?

如何调试 bash 脚本?

有没有不使用 echo 和日志记录的方法来调试 bash 脚本?

我正在谈论使用断点和类似的东西。

答案1

有几种不同的方法,例如:

  • 使用 -x 选项运行脚本

    bash -x yourscript.sh
    
  • set -x在脚本文件开头的 Shebang 之后#!/bin/bash和脚本开头之前添加一个新行,set -v将显示 shell 输入行,set -x显示已执行的命令和参数

  • 用以下代码替换脚本文件#!/bin/bash -xv

答案2

答案3

如今,Visual Studio Code Bash 调试扩展. 它具有“Step in/out/over”功能并且可以显示每个变量的值。

VS Code Bash 调试屏幕截图

答案4

您可以使用这个小功能进入“控制台”:

function debug
{
    echo "#############|  Entering DEBUG mode  |####################";
    cmd=""
    while [[ $cmd != "exit" ]]; do
        read -p "> " cmd
        case "$cmd" in
            vars ) ( set -o posix ; set );;
            exit ) ;;
            * ) eval "$cmd";;
        esac
    done
    echo "#############|  End of DEBUG mode |####################";
}

然后,在您的脚本中(示例):

for file in *; do
...
   if [[ $file == "strange_case.txt" ]]; then
       # break the code here to analyze:
       debug
   fi
...
done

它将接受任何命令,保持局部变量不变。要退出“调试”模式,请键入“exit”(它不会退出脚本),它将继续执行代码。如果在循环内使用“debug”,它每次都会停止。您可以将其包装在“if”中(如上例所示),或创建“watch”函数:

function debug_watch
{
    if [[ $1 == $2 ]]; then
        debug
    fi
}

# And Use it:

debug_watch "$file" "strange_case.txt"

我还添加了“vars”命令,它将转储所有可用变量及其值。您也可以添加自己的自定义命令。

我花了几分钟编写了代码,因此使用它时请自担风险。请注意,在调试模式下可以执行任何命令,因此如果您将其留在生产脚本中,则会带来安全风险。

相关内容