Git for Windows (Git Bash) での環境構築小ネタ


はじめに

※ 完全なる備忘録です。

環境構築にハマってて設定等を色々自動化しようとしている今日この頃です。Windowsマシンではもっぱら、「Git for Windows」を愛用しているのですが、そのHOME変数に空白があり(ホームディレクトリ名に空白があり)、設定ファイル内のコマンドが正常に読まれないということがありました。

非常に危険思想ではありますが、「ホームディレクトリを変えればよくない?」と思ってしまったので実際にやってみたという感じです。ただWindowsマシンのガチの環境変数を変えるわけではないのでそこまで問題にはならないと思ってます。

環境とかとか

PC: Surface Pro 4(WIndows 10 Pro 64-bit)
Git for Windows: 2.14.2

そろそろあたらしいやつをインストールします。

空白があることの問題点

Git for WindowsでのHOME変数は以下のようになっています。

$ echo $HOME
>>> /c/Users/<下の名前> <上の名前>

初めて買ったノートPCでかつ計算系の研究室に行くことを考えていなかったという点でこんな感じでセットアップしてしまいました。非常に愚かでした。。

こんな感じなので、このマシンでシェルスクリプトを書く際にHOME変数を使うと色々面倒なことが起こりました。

test.sh
#!/bin/bash

oldhome="/c/Users/aaaaa\ xxx"

touch nanika.txt
cp nanika.txt "${oldhome}"

if [ $? -eq 0 ]; then
    echo 'OK'
else
    echo 'Fail'
    exit
fi

echo 'Acomplished'

これ自体は'Acomplished'が出力されて正常終了するのですが、実際にファイルがコピーされたのか確認すると、されていません。その代わりカレントディレクトリに' xxx'というファイルができました。空白を認識するようにエスケープをしたり、変数を展開する際にダブルクォーテーションを使ったりと色々やってみたのですが、中々うまくいきませんでした。

こういったことが多々あったので、いっそのことホームディレクトリを変えてしまおうという発想(?)に行きつきました。

現状の解決策

今回はWindowsのホームディレクトリを変更するのではなく、Git for Windows上でのHOME変数を変えるだけなので、ググってみたところ同じ問題に直面したのであろう人たちがいることが分かり、内心ほっとしました(笑)。

解決策としては、主にこちらのサイトを参考にしました。簡潔にまとまっているのでありがたいです。

まずは以下のスクショのようにWindowsキーでGit for Windows(Git Bash)を探し出し、右クリックでそのショートカットがあるディレクトリまで飛びます。

ショートカットまで飛んだら、そのショートカットを右クリックしてプロパティを開きます。そのプロパティのショートカットの欄を選択し、リンク先(T)と作業フォルダー(S)を以下のように変更します。

リンク先(T): C:\Windows\System32\cmd.exe /c "set HOME=C:\Users\新しいホームディレクトリ&"C:\Program Files\Git\bin\bash.exe" --login -i"

作業フォルダー(S): C:\Users\新しいホームディレクトリ

参考記事によるとGit for Windows起動時にsetコマンドを使ってHOME環境変数を指定したディレクトリパスに設定しているようです。また作業フォルダーは任意のパスに設定できるようです。今回はホームディレクトリと作業フォルダーは同じにしています。Windowsでこういうパスの指定方法があることは知らなかったのでためになります。

あとはこれを適用(A)して再度Git for Windowsを開けば反映されます。お疲れ様でした。.bashrcや.bash_profile等も新しいホームディレクトリに置いておけば問題なく使えます。

以前に記事にしたAnaconda3の自動インストールスクリプトは、この空白問題によって正常に動作しなかったのですが、難なく動きました(笑)。

個人的に不便な点(余談)

自分にはタスクバーとデスクトップ画面をあまり汚したくないという謎のポリシーがあります(笑)。なのでGUIは大体コマンド操作で開くようにセットアップしています。Windowsには"Windowsキー+R"でファイルを実行できるショートカットがあるので、バッチファイルに処理を書き込んで必要なGUIを起動しています。以下のような感じです。

app_activate.bat
@echo off

set variable=%1
set host=%COMPUTERNAME%

if %host%==xxx (
    call :SURFACEPC
    ) else if %host%==yyyy (
    call :ANOTHERPC
    ) else (
    echo "unknown server..."
    pause
    )

:SURFACEPC
if %variable%==vim (
    start C:\"Program Files"\Git\usr\bin\vim81-kaoriya-win64\gvim.exe
    ) else {
    echo "argument error..."
    pause
    )

:ANOTHERPC
if %variable%==gvim (
    start C:\"Program Files"\Git\usr\bin\vim82-kaoriya-win64\gvim.exe
    ) else {
    echo "argument error..."
    pause
    )

これをホームディレクトリに配置し、先のショートカットで実行すればGUIが立ち上がるのですが。。。。


という楽しいことが起こります。

これはこのコマンドが"C:\Users<以前の空白ありホームディレクトリ>app_activate vim"と同じだからです。Git for Windowsでは新しいHOMEが認識されていても、Windowsでは以前のHOMEが正式なパスになるのでこのようなことが起こります。なので新しいホームディレクトリにapp_activate.batを置いて同じことをやろうとすると、ファイルがないというエラーが返ってきます。

対処法としては、非常に面倒ではありますがフルパスで明示的に指定してやると動きます。例えば、"C:\Users\Masato\app_activate vim"みたいな感じです。これも後々何とかしてみます。

こういったエラーは絶えず起こりうるのでいじくりまわすのは非常に楽しいですね^_^