我正在编写一个 shell 脚本,或者我应该更具体地说,是一个 ZSH 函数,并且我正在使用各种简短的命令来检查 git 存储库等内容的状态。
但是,我在使用一个特定命令时遇到了很多麻烦。在另一个 stackoverflow 帖子中,我找到了打印 git 存储库的根文件夹的命令:
git rev-parse --show-top-level
在我实际的 zsh 实例中,如果我执行
$(git rev-parse --show-top-level)
返回适当的值,一切都很好。但是,我脚本中的这种方法效果不佳。我将提供一些背景信息:
[ $(git status &>/dev/null) $? -eq "0" ] && {
git_name=$("git rev-parse --show-top-level")
echo $(eval $git_name)
}
现在我不了解你,但在我看来,这似乎是错误的做法(不是第一行;我可以接受)。其输出大致为:
command not found: git rev-parse --show-top-level
看来我应该写这个的方式是:
[ $(git status &>/dev/null) $? -eq "0" ] && {
git_name=$(git rev-parse --show-top-level)
echo $git_name
}
这个的输出是:
--show-top-level
退出状态为0。
我的问题是,为什么这些都不起作用,实现它的正确方法是什么?我的猜测是它与空格后有一个双虚线参数有关,最后一个长参数被视为命令本身(至少在第二个示例中),但这是我直觉的范围。
帮助表示赞赏!