Git Shell脚本未计算由'--';
我正在编写一个shell脚本,或者更确切地说,是一个ZSH函数,我正在使用各种简短的命令来检查git存储库等的状态 然而,我在一个特别的命令上遇到了很多麻烦。在另一篇stackoverflow文章中,我找到了打印git存储库根文件夹的命令:Git Shell脚本未计算由'--';,git,bash,arguments,Git,Bash,Arguments,我正在编写一个shell脚本,或者更确切地说,是一个ZSH函数,我正在使用各种简短的命令来检查git存储库等的状态 然而,我在一个特别的命令上遇到了很多麻烦。在另一篇stackoverflow文章中,我找到了打印git存储库根文件夹的命令: git rev-parse --show-top-level 在我的实际zsh实例中,如果我执行 $(git rev-parse --show-top-level) 返回适当的值,一切正常。然而,我的脚本中的这种方法并没有很好地工作。我将给出一个小背景:
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
我的问题是,为什么这两种方法都不起作用,正确的方法是什么?我的猜测是,它与空格后有一个双虚线参数有关,最后一个长参数被视为命令本身(至少在第二个示例中),但这是我直觉的范围
谢谢你的帮助 试试这个:
[ $(git status &>/dev/null) $? -eq "0" ] && {
git_name=$(git rev-parse --show-toplevel)
echo $(eval $git_name)
}
git rev parse
周围的双引号是不必要的,参数应该是--show top level
,而不是--show top level
太棒了!非常感谢你!