I'm trying to parse the output of commands run in a bash loop. Here is an example:
$ 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
The command git log --format='%H'
prints out only the commit ID for each Git commit. The command git branch --contains $i
prints out which Git branches contain the commit.
I'm trying to find the latest git commit that is not on branch 'foobar'. I would like to echo $i
for the first branch whose output of git branch --contains $i
contains a line that does not start with the *
character, which specifies "current branch". What Bash documentation should I be reading?
Note that I am aware of other solutions to this problem. However, I plan on making additions that the other answers do not account for. Furthermore, this is how I improve my Bash scripting abilities.
git branch --contains
command or by checking how many lines this command returned withwc -l
. In either way, you will likely need to use command substitution (you are already doing that but look up on differences between$()
and backticks),[
command (typetype [
and thenhelp [
),if
or||
or something similar, andbreak
orexit
to exit for loop.grep -v '^*'
after thecontains
command I can get the name of the branch. Now, how might I output$i
and break only when grep matches something?