Analisa linhas de saída do loop do bash

0

Estou tentando analisar a saída de comandos executados em um loop bash. Aqui está um exemplo:

$ 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

O comando git log --format='%H' imprime apenas o ID de confirmação para cada confirmação do Git. O comando git branch --contains $i imprime quais ramificações do Git contêm o commit.

Estou tentando encontrar o último commit do git que não está no branch 'foobar'. Eu gostaria de echo $i para o primeiro ramo cuja saída de git branch --contains $i contém uma linha que não inicia com o caractere * , que especifica "ramificação atual". Qual documentação do Bash eu deveria estar lendo?

Note que estou ciente de outras soluções para esse problema . No entanto, planejo fazer acréscimos que as outras respostas não levam em conta. Além disso, é assim que eu melhoro minhas habilidades de script Bash.

    
por dotancohen 16.07.2014 / 10:54

1 resposta

1

Algo parecido com isso pode ser o que você quer.

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

Imprime o commit e seu branch, se não o branch atual.

    
por 16.07.2014 / 13:59