それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Windowsコマンドのラッパーを作って、Cygwinを快適にする

cygwin は便利です。WindowsがMacみたいにUnixとのハイブリッドで動きます.仮想サーバをあげるのと大きな違いが、ファイルをそのまま使える.つまりCmd.exeのつもりで,Minttyを使える.しかもWindowsがきれいなUTF-8環境になります.

mintty はUTF-8で動かすのがオススメ

mintty + bashUTF-8で動かすと嬉しいです.日本語ファイル名は気にしなくても大丈夫.Cygwin1.7格好いい.

windowsコマンドは文字化けする

Windowsのコマンド類 ping / ipconfig などは文字化けする.nkf -w だと、全部出力するまで見られない。これはrubyのopen3/IO#foreach を使うことで解決することが分かった.

phpががない

phpcygwin に無い。cygportsにあります,でも動作不安定、自分でビルドする事も出来る。どうも拡張モジュール(特にGD)作るのが大変でした。時間掛かるし、途中でErrorになるし,クロスコンパイルも依存関係を解決するのが大変だった

windows版の php でイイじゃん

cygwin の魅力は Windowsのexeファイルはそのまま使えること.仮想環境と大きく違うこの特徴を十二分に発揮する。minnty がSJISならそのまま使っても何の問題もない.

phpruby でラッピング

/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)}

cygwinパッケージ で何でもやろうとしない.

php.exeのようにWindows版Executableが提供されてるときは、Cygwin からそれを使えばいい.
ハイブリッドの良いところ取りが出来るのがすてきです.CentosDebianの仮想化がイイと思ってたけれど,コレはコレでCygwinもやっぱり便利.