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

현재 브랜치가 아닌 경우 커밋과 해당 브랜치를 인쇄합니다.

관련 정보