1. ホーム
  2. linux

[解決済み] シェルスクリプトの変数に現在のgitブランチの名前を取得する方法とは?重複

2022-11-18 10:04:29

質問

シェルスクリプトの初心者なのですが、これがわかりません。慣れないうちは、git branchというコマンドは次のようなものを返します。

* develop
  master

ここで、アスタリスクは現在チェックアウトされているブランチを示しています。ターミナルで以下を実行すると

git branch | grep "*"

得ることができる。

* develop

さすがに

しかし

test=$(git branch | grep "*")

または

test=`git branch | grep "*"`

そして

echo $test

とすると、結果はディレクトリ内のファイルのリストだけになってしまいます。test="* develop"の値をどのようにすればいいのでしょうか?

そして、次のステップは ("* develop" を test という変数に取得したら)、部分文字列を取得することです。それは単に次のようになりますか?

currentBranch=${test:2} 

そのsubstring関数で遊んでいたら、"bad substitution"のエラーが何度も出て、理由がわかりません。

どのように解決するのですか?

が展開されている場合、grepの代わりにsedを使用することで、すぐにブランチの名前を取得することができます。

branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')

そして、Noufal Ibrahimが提案したgit symbolic-refを使ったバージョンです。

branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

展開について詳しく説明すると、(marcoがすでにやっているように)展開はechoの中で行われ、あなたが echo $test$test を含む * master を含む場合、その * は通常の展開規則にしたがって展開されます。これを抑制するには、marcoが示すように、変数を引用する必要があります。 echo "$test" . あるいは、アスタリスクを削除してからエコーすれば、すべてうまくいきます。 echo ${test:2} は単に master . あるいは、すでに提案されているように、新たに割り当てることもできます。

branch=${test:2}
echo $branch

これは master と表示されます。