1

在编写脚本的过程中,我会以不同的方式和不同的程度使用命令的输出 - 以便对手头的任务进行故障排除。例如,在这个片段中,它读取应用程序的图标资源并返回是否不是它具有典型的 .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

不可避免地,随着每个 bug 被压制,并且stdout开始更多地与实际功能与调试过程相关,这个反馈通常要么被注释掉,要么被静音,要么被删除——原因很明显。

但是,如果想提供一个简单的选项——无论是硬编码,还是作为参数传递,以在运行时选择性地显示一些、全部或不显示“这种”消息——提供这种简单功能的最佳方式是什么?我希望基本上复制它的功能,set -x但不是逐行列出,它只会打印我专门设计的通知。

echoif检查 a 的 a替换每一个似乎过分了debug=1|0我一直无法在我的自己的脚本。这个小小的表达似乎很有希望,但很少有文档 re:在那里(尽管我确信这是这个难题的关键)getoptsgetopt2>$1

[ $DBG ] && DEBUG="" || DEBUG='</dev/null'
check_errs() {
    # Parameter 1 is the return code Para. 2 is text to display on failure.
    if [ "${1}" -ne "0" ]; then
        echo "ERROR # ${1} : ${2}"
    else
        echo "SUCESSS  "
    fi }

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

4

2 回答 2

1

一个简单的技巧是用一个变量简单地替换你的“日志”回显命令,即

TRACE=:
if test "$1" = "-v"; then
    TRACE=echo
    shift
fi

$TRACE "You passed the -v option"

如果您愿意,您可以为不同类型的消息使用任意数量的这些。

于 2011-07-31T03:02:04.597 回答
0

您可以查看一个支持 bash 的通用开源跟踪库。

WKR

阿诺-坎·乌斯图恩索兹

于 2013-09-27T17:14:29.790 回答