我在 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: $@"
}
当我只使用普通回声或任何其他命令时,也会发生同样的事情。(编辑:显然不是......)