如何参数化调试输出(BASH)的详细程度?

时间:2011-07-29 16:23:54

标签: debugging bash getopt

在编写脚本的过程中,我将以不同的方式使用命令的输出,并以不同的程度 - 以便对手头的任务进行故障排除。例如,在此片段中,它读取应用程序的图标资源和返回它是否具有典型的.icns扩展名......

icns=`defaults read /$application/Contents/Info CFBundleIconFile`
    if ! [[ $icns =~ ^(.*)(.icns)$ ]]; then
        echo -e $icns "is NOT OK YOU IDIOT!  **** You need to add .icns to "$icns"."
    else 
        echo -e $icns "\t Homey, it's cool.  That shits got its .icns, proper."
    fi

不可避免地,因为每个错误都被压扁了,并且stdout开始更多地涉及实际功能与调试过程,所以这个反馈通常被注释掉,沉默或删除 - 原因显而易见。

但是,如果想要提供一个简单的选项 - 硬编码或作为参数传递,可选地显示部分,全部或全部“此类”的消息运行时 - 提供这种简单功能的最佳方法是什么?我希望基本上复制set -x的功能,但它不会打印出我已经构建过的通知,而不是逐行概述specificically。

用检查echo的{​​{1}}替换每个if似乎过分,但我无法找到如何的简明解释在我自己的脚本中实现 debug=1|0 / getopts方案(永远不能记住哪一个是内置的)等。这个小小的表达看起来很有希望,但是文档很少:getopt在那里(虽然我确定这是这个难题的关键)

2>$1

这个交易的任何简洁和可重复的技巧都会受到欢迎,如果我完全错过了这条船,或者它是一条蛇,它会咬我 - 我道歉。

2 个答案:

答案 0 :(得分:1)

一个简单的技巧是简单地用变量i.n。

替换“logging”echo命令
TRACE=:
if test "$1" = "-v"; then
    TRACE=echo
    shift
fi

$TRACE "You passed the -v option"

如果您愿意,可以为不同类型的消息提供任意数量的消息。

答案 1 :(得分:0)

您可以检查支持bash的常见开源跟踪库。

WKR

Arno-Can Uestuensoez