当前位置: 首页>>技术教程>>正文


如何调试bash脚本?

, ,

问题描述

有什么方法可以在不使用echo和logging的情况下调试bash脚本?

我说的是使用断点之类的东西。

最佳方案

是的,这里有Bash Debugger Project

您还可以在执行时使用set -xset -v。更多信息:

http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/debugging.html http://www.cyberciti.biz/tips/debugging-shell-script.html

祝好运!

次佳方案

有几种不同的方法,即:

  • 使用-x选项运行脚本

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

  • #!/bin/bash -xv替换脚本文件的shebang

第三种方案

如今,这里有the Visual Studio Code Bash Debug extension。它具有’Step in/out/over’并可以显示每个变量的值。

第四种方案

shellcheck是该镇最好的-

http://www.shellcheck.net/

您还可以与vim集成,这是git repo-

https://github.com/koalaman/shellcheck

第五种方案

您可以使用此小功能放入”console”:

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

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

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

# And Use it:

debug_watch $FILE "strange_case.txt"

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7660.html,未经允许,请勿转载。