2

私はシェル スクリプト、またはより具体的には 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 です。

私の質問は、なぜこれらのどちらも機能しないのですか?これを実装する正しい方法は何でしょうか? 私の推測では、スペースの後に二重破線の引数があることと関係があり、最後の長い引数はコマンド自体として扱われています (少なくとも 2 番目の例では) が、それは私の直感の範囲です。

助けてください!

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 に答える