Bash 上で直接実行できる Windows バッチファイルを作る
GitBash など、Windows 上で Bash を使っているとき、Windows バッチファイルを起動するには、cmd.exe
から叩いてあげれば実行できる。
例えば以下のような空ファイルを作る create.bat
があったとする。
@Echo Off
Type C:\Temp.txt
Exit /b
GitBash 上から叩くときは以下のように呼ぶ。
$ cmd.exe //c create.bat
で、今回はこれを、$ create.bat
と叩くだけで実行できるようにする。
GitBash から起動した時は、自己を cmd.exe
経由で起動し直し、Windows コマンドプロンプトから起動した時はその処理を無視する、そんな処理を書ければ良い。Bash におけるヒアドキュメントを利用して、以下のようにすることで実現できる。
: <<EOF
@Echo Off
Goto WINDOWS
EOF
exec cmd //c ${0//\//\\\\} $*
:WINDOWS
Type C:\Temp.txt
Exit /b
改行とコメントを入れるとこんな感じで動いている。
$ Bash から起動した時は「EOF」までの行がヒアドキュメントとして無視される
# cmd.exe が解釈する時は1行目がラベルになり、3行目の Goto で「:WINDOWS」ラベルに移動する
: <<EOF
@Echo Off
Goto WINDOWS
EOF
$ Bash から起動した時はこの行が実行される
exec cmd //c ${0//\//\\\\} $*
# cmd.exe はこのラベルに飛び、実処理を行って終了する
:WINDOWS
Type C:\Temp.txt
Exit /b