24

私は次のようなことをしたいです:

if [[ git status &> /dev/null ]]; then
   echo "is a git repo";
else
   echo "is not a git repo";
fi

終了ステータスの確認方法がわからない場合を除きます。これを修正するにはどうすればよいですか?

ありがとう

4

3 に答える 3

28

変数$?には、最後のコマンドの戻りコードが含まれています

編集:正確な例:

git status &> /dev/null
if [ $? -eq 0 ]; then
  echo "git status exited successfully"
else
  echo "git status exited with error code"
fi
于 2010-02-01T22:03:55.067 に答える
24

単にそのように

if git status &> /dev/null
then
   echo "is a git repo";
else
   echo "is not a git repo";
fi

または、よりコンパクトな形式で:

git status &> /dev/null && echo "is a git repo" || echo "is not a git repo"
于 2010-02-01T22:07:17.707 に答える
1

私がよく使用するもう1つの形式は、次のとおりです。

git status &> /dev/null
if (( $? )) then
    desired behavior for nonzero exit status
else
    desired behavior for zero exit status
fi

これは、受け入れられた回答よりもわずかにコンパクトですが、コマンドをgregsethの回答と同じ行に配置する必要はありません(これは、必要な場合もありますが、読みにくくなる場合もあります)。

二重括弧は、zshの数式用です。(たとえば、ここを参照してください。)

編集:(( expression ))構文はほとんどのプログラミング言語の通常の規則に従うことに注意してください。つまり、ゼロ以外の式はtrueと評価され、ゼロはfalseと評価されます。他の選択肢([ expression ]、、、、など)は[[ expression ]]、通常のシェル規則に従います。つまり、0(エラーなし)はtrueと評価され、ゼロ以外の値(エラー)はfalseと評価されます。したがって、この回答を使用する場合は、and句を他の回答から切り替える必要があります。if expressiontest expressionifelse

于 2017-04-18T20:25:50.870 に答える