Bashループの出力ラインの解析

Bashループの出力ラインの解析

Bashループで実行されるコマンドの出力を解析しようとしています。例は次のとおりです。

$ for i in `git log --format='%H'`; do echo $i ; git branch --contains $i; done | head -n 8
5f11ce7da2f9a4c4899dc2e47b02c2d936d0468e
* foobar
e1c3f6fabd45715b527a083bc797e9723c57ac89
  dev1
* foobar
7053e08775d2c1da7480a988a235e445799cbca5
  dev1
* foobar

このコマンドはgit log --format='%H'単に各GitコミットのコミットIDを出力します。このコマンドは、git branch --contains $iコミットを含むGitブランチを印刷します。

"foobar"ブランチにない最新のgitコミットを見つけようとしています。 「現在の分岐」を指定する文字で始まらない行が、出力に含まれる最初の$i分岐をエコーし​​たいと思います。どのBash文書を読むべきですか?git branch --contains $i*

知っておいてくださいこの問題に対するその他の解決策。ただし、他の回答で考慮されていない内容を追加する予定です。また、これは Bash スクリプティング技術を改善する方法です。

答え1

このようなものがあなたが望むものかもしれません。

for i in $(git log --format='%H'); do
    branch="$(git branch --contains $i|awk 'NR==1{print $1}')"
    [ "$branch" != "*" ] && echo "commit '$i' is in branch '$branch'"
done

現在のブランチでない場合は、コミットとそのブランチを印刷します。

関連情報