web-dev-qa-db-ja.com

終了コードの比較:単項演算子が必要です

.txtファイルにgitコミットのリストがあり、コミットを繰り返し処理したいと思います。 COMMIT_IDごとに、終了コードが0または1であるgitコマンドを使用してチェックします。

結果に応じて、echotrueまたはfalseにします。

しかし、スクリプトを実行すると、次のエラーが発生します。

line 5: [: 0: unary operator expected

スクリプトは次のとおりです。

#!/usr/bin/env bash
input="./commits.txt"
while IFS= read -r COMMIT_ID
do
  if [ 0 -eq $(git merge-base --is-ancestor $COMMIT_ID HEAD) ]; 
    then 
      echo "true"; 
    else 
      echo "false"; 
    fi
done < "$input"
3

$()は、終了コードではなく、指定されたコマンドの出力に置き換えられます。終了コードを使用するには、コマンドをifで直接使用します。

if git merge-base --is-ancestor "$COMMIT_ID" HEAD; then
7
Stephen Kitt