2

我正在编写一个 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。

我的问题是,为什么这些都不起作用,实现它的正确方法是什么?我的猜测是它与空格后有一个双虚线参数有关,最后一个长参数被视为命令本身(至少在第二个示例中),但这是我直觉的范围。

帮助表示赞赏!

4

1 回答 1

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

于 2012-04-29T14:40:48.687 回答