cygwin は便利です。WindowsがMacみたいにUnixとのハイブリッドで動きます.仮想サーバをあげるのと大きな違いが、ファイルをそのまま使える.つまりCmd.exeのつもりで,Minttyを使える.しかもWindowsがきれいなUTF-8環境になります.
windowsコマンドは文字化けする
Windowsのコマンド類 ping / ipconfig などは文字化けする.nkf -w だと、全部出力するまで見られない。これはrubyのopen3/IO#foreach を使うことで解決することが分かった.
phpががない
php が cygwin に無い。cygportsにあります,でも動作不安定、自分でビルドする事も出来る。どうも拡張モジュール(特にGD)作るのが大変でした。時間掛かるし、途中でErrorになるし,クロスコンパイルも依存関係を解決するのが大変だった
windows版の php でイイじゃん
cygwin の魅力は Windowsのexeファイルはそのまま使えること.仮想環境と大きく違うこの特徴を十二分に発揮する。minnty がSJISならそのまま使っても何の問題もない.
php を ruby でラッピング
/usr/local/bin/php を作ってみた.
1 #!/usr/bin/env ruby 2 require "kconv" 3 require "stringio" 4 $stderr = StringIO.new 5 out_kcode = Kconv::UTF8 6 out_kcode = Kconv::UTF8 if "utf-8"== ENV["LANG"].split(".").last.downcase 7 out_kcode = Kconv::SJIS if "sjis" == ENV["LANG"].split(".").last.downcase 8 IO.foreach("|/home/Public/apps/php/php.exe #{$*.join(' ')}") {|line|puts line.kconv(out_kcode,Kconv::SJIS)}
今回はphp.exeのPEARも次の様にした
/usr/local/bin/pear 作ってみた.
1 #!/usr/bin/env ruby 2 require "kconv" 3 require "stringio" 4 $stderr = StringIO.new 5 out_kcode = Kconv::UTF8 6 out_kcode = Kconv::UTF8 if "utf-8"== ENV["LANG"].split(".").last.downcase 7 out_kcode = Kconv::SJIS if "sjis" == ENV["LANG"].split(".").last.downcase 8 IO.foreach("|/home/Public/apps/php/pear.bat #{$*.join(' ')}") {|line|puts line.kconv(out_kcode,Kconv::SJIS)}