【发布时间】:2019-11-12 03:17:41
【问题描述】:
我正在尝试将以下脚本从 BASH 转换为 ZSH,但 POPD 无法正常工作...有人可以帮帮我吗?
runMyScript() {
if [[ -e $PROJECTS_HOME/myFolder/myScript.sh]]; then
pushd $PROJECTS_HOME/myFolder > dev/null
. ./myScript.sh
popd > dev/null
else
... //Do something else instead
fi
}
runMyScript
错误是这样的
myScript:popd:5: directory stack empty
现在我知道这意味着什么,但我似乎无法修复它......我也在努力寻找有意义的修复。
如果我手动运行脚本,它似乎工作正常,但如果我通过调用 runMyScript 来运行它,那么它似乎就失败了。
有人可以帮帮我吗?
【问题讨论】:
-
不太可能将真正的错误消息发送到标准输出,但我会从您的脚本中删除
>/dev/nulls,然后在set -vx之前和set +vx之后添加shell 调试有问题的代码。您还可以在else分支中包含一个真正的警告消息。然后你就知道到底发生了什么,然后你就能弄清楚它为什么会发生。用双引号括起来你的所有变量不会有什么坏处,即"$MyVar"。祝你好运。 -
"directory stack empty" 是一个正常的答案 popd on stderr 当目录没有变化时,我不知道你的脚本做了什么,所以很难说更多。顺便说一下 > 重定向stdout而不是stderr,并将this重定向到./dev目录中的一个空文件,该文件可能不存在而不是系统/dev/null
-
@Takuhii :从这条消息中,我可以得出结论
pushd失败了,但您并没有说您从 pushd 收到错误消息。难道是你忽略了它?再次运行脚本并发布完整的输出(复制和粘贴)。一般来说,在代码中处理失败的推送是个好主意,例如pushd $PROJECTS_HOME/myFolder || exit 1。 -
谢谢@shellter,这让我走上了正轨,我的脚本现在可以运行了,谢谢 :)
-
@user1934428 pushd 似乎工作正常,没有错误消息:(