0

我在 bash 中有这个功能,其中 if 语句直到作用域结束才会运行,但只运行 if 语句之后的第一个命令,然后在结束后继续执行 first-next 命令范围。我似乎无法弄清楚为什么会发生这种情况,或者为什么一开始就有可能。

有问题的代码:

function log() {
        if [[ "x$disablelog" != "xtrue" && "x$logfile" != "x" ]]; then
                if [[ ! -w "$logfile" ]]; then
                        touch "$logfile" &>/dev/null
                        if [[ "$?" != "0" ]]; then
                                debugout "Cannot write log file $logfile, disabling log."
                                disablelog="true"
                                echo "This, and the lines above/below are never executed. However, debugout is."
                                return 1
                        fi
                fi
                echo "[$(date +%s)] $@" >> "$logfile"
        fi
}


过去我遇到过几次这个问题,但从来没有找到任何关于它的信息,我想一劳永逸地找出我做错了什么。

更新:根据请求添加调试:

function debugout() {
        if [[ "x$debug" != "xtrue" ]]; then
                return
        fi
        if [[ "x$color" == "xtrue" ]]; then 
                echo -e "\e[1;36mDEBUG:\e[0m $@"
        else
                echo -e "DEBUG: $@"
        fi
        log "DEBUG: $@"
}

当我只使用普通回声或任何其他命令时,也会发生同样的事情。(编辑:显然不是......)

4

1 回答 1

3

什么都没有运行的事实debugout表明问题就在那里。

debugoutlog递归地互相调用,这阻止了debugout.

于 2013-06-07T13:09:17.303 回答