我正在编写一个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。
我的问题是,为什么这些都不起作用,以及实现这个的正确方法是什么?我的猜测是它与空格后面有一个双重破坏的参数有关,而最后一个长参数被视为一个命令本身(至少在第二个例子中),但这就是我直觉的程度。 / p>
帮助表示赞赏!
答案 0 :(得分:2)
试试这个:
[ $(git status &>/dev/null) $? -eq "0" ] && {
git_name=$(git rev-parse --show-toplevel)
echo $(eval $git_name)
}
git rev-parse
周围的双引号是不必要的,参数应该是--show-toplevel
,而不是--show-top-level
。