久しぶりにJavaのネタ。今日はJava7がリリースされた…んだけど、それとは全く無関係(爆)
それどころか超久しぶりにC言語までコーディングしちゃったし^^;
Windows環境で、JavaからCygwin経由でシェルを呼び出す新しい方法を思い付いたので、試してみた。
以前から、JavaのProcessBuilderで、直接シェルを指定する代わりにCygwinのbash.exeを呼び出して間接的にシェルを実行することは出来ていた。
でもこの方法だとJavaのプログラム内でWindows(Cygwin)かどうかを判定してWindows専用の処理を入れてやる必要があった。
新しく思い付いた方法は、Javaのプログラムはシェル呼び出しの形のまま、何も変える必要は無い。
呼ばれる側をシェルではなく「.sh.exe」という拡張子のexeファイルにする。exeファイルを実行する(呼び出す)ときは拡張子「.exe」を省略して指定できるので、表面上はJavaから直接シェルを呼んでいるように見えるというわけ(笑)
で、このexeファイルは、自分と同名のシェルをbash.exe経由で呼び出すように作っておけば、最終的にちゃんとシェルが呼ばれる。
exeファイルはCygwinのgccで作った。
なにせ超久しぶりにC言語のコーディングなんてやったもんだから、文字列の操作とか面倒くせー^^;
マルチバイト文字(UTF-8)の考慮なんて、どうすればいいのか分からん(汗)
(この辺りはJavaの方がはるかに楽だ。(そして配列操作はScalaの方がさらに便利だ(笑)))
本格的に使うとなったらそういった点もちゃんと作らないといけないだろうが、まぁとりあえずはいいやw