[解決済み] シェルスクリプトの変数に現在のgitブランチの名前を取得する方法とは?重複
質問
シェルスクリプトの初心者なのですが、これがわかりません。慣れないうちは、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
と表示されます。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
deepin20のサブネットマスクはどこですか?deepinのサブネットマスクを表示するためのヒント
-
deepin linuxでroot権限に切り替えるには?Deepinでrootに切り替えるためのヒント
-
Linux 5.10.10 正式版リリース:NULLポインタの不具合修正など。
-
deepin20のデフォルトブラウザを設定するには?deepinにデフォルトブラウザを追加するためのヒント
-
2020年deepin Deep OS V20のアップデートによる更新情報
-
apache startup error (98) Address already in use: make_sock: could not bind to...
-
[解決済み] libstdc++.so.5: 共有オブジェクトファイルを開くことができない - しかしライブラリはインストールされており最新である
-
[解決済み] Bashシェルスクリプト - フラグをチェックし、その値を取得します。
-
[解決済み] 特定のファイル/フォルダを除外してディレクトリをtarするシェルコマンド
-
[解決済み】現在チェックアウトされているGitブランチをプログラムで決定する方法【重複あり