Quitada ブログ HAX

Hatena Blog でも Quitada ブログ

Windows 上で UNIX ライクなコマンドライン環境を構築

Windows 上で UNIX ライクなコマンドライン環境を構築するといえば、普通は Cygwin とか SFU とかありますが、Windows のドライブ文字から始まる抽象化されていないいけてないパス表現を、UNIX ライクなルートからはじまる抽象化された表現へのマッピングが余計なお世話な訳ですよ quitada 的には。

結局、エクスプローラーとかもあわせて使うことを考えると、いけてないとはいえ Windows のドライブ文字からはじまるパス表現の世界で閉じていてほしいのですよ。

言い換えるなら、ls とか cat とか、UNIX の基本的なコマンドが Windows コマンドプロンプト上で使えればよいんですよね。

そういうときは、PowerShell でもいいんですが、いかんせん初回起動が遅すぎてイライラするので、MinGWMSYS を導入すればよいようです。MinGW は、gcc とか中心とした開発系のコマンド一式、MSYS は ls とかそういう基本的なやつ系一式の Windows 版です。

#最近は、MinGW インストールしたら、MSYS もインストールされるようですね。

これって自宅 Windows Vista 環境にすでにインストールされていて、そういえば Erlang の勉強のためにインストールしたものでした。

Erlangプログラミング

Erlangプログラミング

で、思い出してきました。このとき、なんでその環境をそのまま使わなかったかを。ls コマンドを実行すると、日本語ファイル名・フォルダ名が文字化けしてしまうんですよ。対処方法としては、以下のようにオプションをつけて実行すればよいようです。

ls --show-control-chars

ただ、毎回こんなオプションつけるとめんどいので、doskey コマンドでエイリアスを作ってしまいましょう。こちらは後でまとめて記載。

あと、MinGW や MSYS には、vi が入っていないんですよね。なので、Windows 用の vi 実装である、vim をインストールしました。ただ、コマンドラインから実行すると、vim と入力しなくてはならないんですよねこのままだと。なので、vim.exe のあるフォルダに、以下の内容で vi.bat を作っておきます。

@echo off
vim %*

%* は、UNIX/Linux でいうところの、$* みたいなものですね。バッチファイルに渡された引数をすべて当該コマンドに引き継ぐあれです。

で、以上の設定を行ったコマンドプロンプトを実行する bat を作ります。以下な感じ。

@echo off
@rem MinGW と MSYS の bin、vim.exe のあるフォルダにパスを通す
set PATH=%PATH%;C:\path\to\MinGW\bin;C:\path\to\MSYS\bin;C:\path\to\vim

@rem ls の引数に --color=auto つけて色つけてもいいけど、フォルダ色が青でコマンドプロンプトの背景が黒だと見づらいので、背景色を変えるとか、フォルダ色とか変えるとかしてもいいけど、好みで。
@rem --color=auto に色つけないとファイルとフォルダが区別つかないので、-F をつけてフォルダ名の末尾に / をつくようにするとか
doskey ls=ls -F --show-control-chars $*
cmd /D
exit

あとは、このバッチファイルを実行するショートカットをデスクトップに作っておくとかすればよいかと。

P.S.1
怪社の Windows 7 環境で同じことやったら、どうも ls がおかしい。dir では表示されないフォルダが表示されたり、そこに cd したら「アクセス権限がない」とか怒られる。よくわからなかったので、この環境では MSYS の ls を使うのを断念。以下の内容で、ls.bat というバッチファイル作って、環境変数 PATH の先頭に通したさ。だせー。

@echo off
dir %*

ま、quitada 的には、Linux 環境で ls を打ちまくった後に、Windows 環境にもどってコマンドプロンプトを開いて、ls をうちこんだら「そんなコマンドありません」と怒られないようになれば、基本 OK なんですがね。

P.S.2
家の Vista 環境でも MinGW の ls はおかしいな。ls でみたら、C:\Users\[ユーザー ID] 直下に My Documents というフォルダがあることになっているのに、dir ではそんなフォルダはないときた。うむー。素直に、PowerShell 使った方がよいのか。。。