環境
Windows11Home 21H2
Ryzen5 3500U
RAM 8GB
経緯
僕が初めてCLIに触ったのは、小学生の頃のラズパイだったこともあって、コマンド操作はLinuxで慣れています。
すると、Windowsでls
使っちゃったりして、むむむってなります。
そこで、Windowsでbash使えたらどんなにいいだろう!との思考にたどり着きました。
だがしかし!WSLを使おうとするとBIOSで仮想化の設定を確認してくださいと出る。いやオンにしてるんだよ!
追記:Windowsセキュリティから、コア分離をオンにしたらWSL使えるようになりました。でもやっぱりWSLだとexe動かないんですよね。そこでGitbashを使えばexe動くよ、って話です。(後付け)
そこでしばらく諦めていたんですが、先日素晴らしいものと出会いましてですね、その名も「Git Bash」!!
てなことで書いていきます。
初心者なので、変なこと書いてあったらすいません。コメントやTwitterでご指摘頂けたらありがたいです。
GitについてきたGitbash
先日Windowsにgitを入れた時のことです。gitにGitBashなるものが着いてくるとは噂に聞いていたんですが、いざ入れてみると、これはしっかりBashじゃないか!Linuxネイティブのコマンドこそ使えないが、基本的なファイル操作はできる。そのうえリポジトリに入ったらブランチ名が表示されるから何気ただのBashより使いやすい。よく考えたら当然だけど。
ちなみに、WindowsでUNIXコマンドが使えるものとして、ほかにも、MSYS2やCygwinなどがありますが、動作がクソ重くて、GitBashとは比べ物にはなりません。GitBashもMSYS2を元に作られてるはずなのになぁ、と思ったり。
インストール
Gitの公式サイトとかからインストールします。
インストール過程は省略します。
使い方
スタートメニューからGitBashを選択。ここからの起動だとホームディレクトリが開きます。
Gitをインストールしたディレクトリからgit-bash.exeを開くと、git-bash.exeがあるディレクトリが開きました。ここがルートディレクトリとして登録されてるっぽい。
/usr/bin
の中身を覗いてみたところ、各種コマンドがexeに変換された形で置いてありました。/bin
も然り。
エクスプローラーで/bin
見たところbash.exe、git.exe、sh.exeの3つしかなかったので、何らかの方法で/usr/bin
と同期させてるんでしょうね。シンボリックリンクでもないし、ハードリンクが2つあるわけでもないらしいんだけど、どういうことなんだろ。
実際にGitBashとして動いているのは、/bin/bash
の方っぽいです。でも、Bash上でwhich bash
すると、/usr/bin/bash
といわれるんだけど、なんでだろ。
なお、もちろんWindowsですので、sudo
だとかapt
、yum
とかのLinuxコマンドは使えませんでした。sudoしたけりゃ管理者権限で開け、aptしたけりゃWSL使えということですね。
カスタマイズ
起動しやすくしたい
今のところホームディレクトリの起動は、スタートメニューからしか出来ません。そこで、コマンド入力でホームディレクトリ開いたらどんなにいいだろうと思ったのでやってみます。
まあ、git-bash.exe
があるディレクトリをPATHに追加するだけなんだけどね。
Git for Windows以外に、CygwinとかMSYS2とかを入れてる場合、不具合が起きるかもしれない。
出典:混ぜるな危険 (msys2とCygwinとGit For Windowsを一緒に使ってはいけません)
代替案
パスは適宜読み替えてください。
- 任意の場所にショートカット
git-bash.lnk
を作成。
ショートカット先はC:\Users\自分\AppData\Local\Programs\Git\git-bash.exe --cd-to-home
。 - ショートカットを置いたディレクトリを環境変数に追加。
- システム環境変数PathTextに
LNK
がなければ追加。
確認してみる。
C:\Users\自分> where git-bash
C:\Path_Priority\git-bash.lnk
これでコマンドプロンプトからbashでホームディレクトリを1発で開けるようになった。
なお、ショートカット名がbash.lnk
だと、WSLが開きました。System32内のbash.exe
(WSLの実行ファイル)が反応したみたいです。
もしbash
で開くようにしたければ、システム環境変数の、System32より上に追加すべきですね。
bash内での環境変数PATHはどうなってるの?
$ env
(省略)
PATH=/c/Users/自分/bin:/mingw64/bin:/usr/local/bin…(省略)…/c/Windows/System32/…(省略)…
(省略)
確認したら、一応全てのWindowsのPATHが反映されてました。
ついでに他の環境変数も確認したら、大体はWindowsに従ってるっぽいです。
ちなみに、
~はC:\Users\自分
/はC:\Users\自分\AppData\Local\Programs\Git
になってました。ルートがホームの下にあるのって変な感じ。
ところで、Windows11(おそらくNT~XP~11)の環境変数で規定されてるOS情報って、Windows_NT
なんだね。初めて知った。
WindowsにインストールしたVimを使う
デフォルトでvi
もしくはvim
コマンドを叩くと、GitBash付属のVimが開きます。どうせなら自分でインストールしたVimを使いたい。
OSデフォルトのエンコードをUTF-8にしてないと、ASCII以外の文字は多分化けます。
vim.exeを探す
以下コマンドを打ちます。
$ which vim
/usr/bin/vim
デフォルトのVimは、/usr/bin/vim.exe
にあるようです。Linuxと同じですね。
上述のように、/bin/vim.exe
にも何らかの方法で同期されて置いてあります。
WindowsにインストールしたVimは、環境にもよるでしょうが、インストールしてればおそらくC:\Program Files (x86)\vim\vim90
(バージョンは適宜読み替えてください)あたりにあると思います。
僕の場合、いずれのディレクトリもbash側の環境変数に登録されているので、環境変数の操作は必要ないでしょう。このとき、もしもWindows版のVimをインストールする際にWindowsの環境変数にVimを追加していなければしておきます。
コマンド叩いてヒットするexeを変える
/bin
のほうが(略)\Vim\Vim90
よりも上位に登録されているので、/bin
のほうをどうにかしましょう。
消してもいいんですが、何かあったときに戻せるように、名前を変えるにとどめておきます。名前は何でもいいけど原型とどめてたほうが何かと扱いやすいよね。拡張子もそのまんまにしときましょう。
$ cd /usr/bin ※/binでも可
$ mv vim.exe _vim.exe
$ which vim
/c/Program Files (x86)/vim/vim90/vim
これでvim
を叩くとWindowsにインストールしたVimが開きます。なお、/bin/vi
は、vim
呼び出すだけだったらしく、vi
叩いても開きました。
もちろん、_vim
叩けば付属のVimが開きます。
プロンプトのカスタマイズ
UNIXやLinux環境下のBashなら、~/.bashrc
でPS1
指定してプロンプトをカスタマイズします。別にそれで上書きしてもいいんですが、GitBashのデフォルトのプロンプトのところから変えたい。無駄に設定ファイル増やしたくない。
参考:
- https://qiita.com/EichiSanden/items/6dd7edb24ffb66b01276
-
https://qiita.com/hf7777hi/items/7585c3aa5423a44eef35
(ほぼ内容そのままです)
/etc/profile.d/git-prompt.sh
(Bash上での表示)にデフォルトのプロンプトがあるらしいです。
/etc/profile.d/git-prompt.sh の中身(長い)
if test -f /etc/profile.d/git-sdk.sh
then
TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
TITLEPREFIX=$MSYSTEM
fi
if test -f ~/.config/git/git-prompt.sh
then
. ~/.config/git/git-prompt.sh
else
PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title
PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[32m\]' # change to green
PS1="$PS1"'\u@\h ' # user@host<space>
PS1="$PS1"'\[\033[35m\]' # change to purple
PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
PS1="$PS1"'\w' # current working directory
if test -z "$WINELOADERNOEXEC"
then
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
. "$COMPLETION_PATH/git-completion.bash"
. "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[36m\]' # change color to cyan
PS1="$PS1"'`__git_ps1`' # bash function
fi
fi
PS1="$PS1"'\[\033[0m\]' # change color
PS1="$PS1"'\n' # new line
PS1="$PS1"'$ ' # prompt: always $
fi
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
うん、コメントそのまんまですね。
上の方に、~/.config/git/git-prompt.sh
があれば読み込む旨書いてあるので、ここに書いていこうと思います。これならホームディレクトリ散らかんないし、アクセスしやすい。
12行目から36行目までを~/.config/git/git-prompt.sh
に貼っつけ、カスタマイズします。BashとかPOSIX準拠シェルのPS1の設定方法は調べれば山ほど出てくるので、省略します。
おわり
まだしっかりと使い始めてはいないので、まだ問題点とか出てくるかもしれません。出てきたらこの記事に追加していこうと思います。