Windows なのに Bash を活用したい話。

header

概要

Windows上でghqを使っている時に、ghq look すると新しく cmd が立ち上がって来ます。

普段から cmd で使ってれば違和感はないですが、 Git Bash や Msys2 など Bash を使ってるのにこれをされると辛いですね。

そこで何とか ghq look で bash を起動してやれないか試してみました。

ghq look の動き

リポジトリの該当箇所を確認すると runtime.GOOS の結果、Windowsだったら 環境変数 COMSPEC からターミナルのパスを取得して実行するような処理になっていました。

ref: https://github.com/motemen/ghq/blob/bdfcba594aba1d514ff8336ef3bd07422d0fc444/commands.go#L305-L314

if runtime.GOOS == "windows" {
    cmd := exec.Command(os.Getenv("COMSPEC"))
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.Dir = reposFound[0].FullPath
    err := cmd.Start()
    if err == nil {
        cmd.Wait()
        os.Exit(0)

試しに見てみましょう。

$ echo $COMSPEC
C:\WINDOWS\system32\cmd.exe

$ echo $SHELL
/usr/bin/bash

なるほど、確かにCMDへのパスが入ってますね。 ちなみにこの値、システムのプロパティ から 環境変数 の 設定画面からも確認できます。

screenshot

というわけで ghq に限って この値を指定した上で実行すれば良さそうです。

解決方法

.bashrc を編集し、 ghq に 下記のエイリアスを張り、環境変数をゴニョって標準ターミナルを CMD から $SHELL に格納されているものに変更した上で実行するようにします。

alias ghq='COMSPEC="$SHELL" ghq'

Msys2 など $SHELL がデフォルトで入ってこない環境は事前に変数をセットしてください。


関連リンク