cygwin の utf-8利用にnkf は便利。
CygwinはUTF-8が便利です。内部的にUTF-8化されています。とても便利に感じます。しかしWindowsのコマンド類はSJISを出力します。
cygwin+mintty でUTF-8を使っていると、ls.exe は問題なくutf-8で日本語ファイル名を出力してくれて便利です。一方でwindowsのコマンドはSJISを出力するので、化けます。ipconfig/ping/dir などが代表例です。
NKFにかけてUTF-8で出力する。
alias ipconfig='ipconfig | nkf -w' alias ifconfig='ipconfig | nkf -w'
そのほかに引数展開するようなコマンドは
function するかシェルスクリプト作れば、問題なくラッパーが作れることに気づきました。
cscript をラップしてUTF-8にする関数
function cscript(){ cscript.exe `cygpath -w $@` | nkf -w ; }
alias では引数展開がうまくいかないので関数を使いました。しかし関数でも、オプションの解決が不満だったので、シェルスクリプトにしました。
/usr/local/bin/cscript
#!/usr/bin/env bash #引数からパスを見つけてWindowsパスに変換する function cygpath_to_winpath(){ args=() for i in $@ ; do if [ -s $i ]; then args=(${args[@]} `cygpath -w $i`) else args=(${args[@]} $i) fi done echo ${args[@]} return 0 } cscript.exe `cygpath_to_winpath $@` | nkf -w
bashの場合、aliasの代わりにfunctionが使える。
alias がお手軽で良いのですが、引数展開やパイプを複雑にやるには向いてませんでした。そこで関数を使いました。関数だとテストがしにくく管理しにくいので、シェルスクリプトにしました。
- alias 別名
- function 関数
- /bin/foobar シェルスクリプト
aliasの代わりにコマンドを定義する、functionを作る、それでも不満ならシェルスクリプトが使えると知りました。Bashのコマンドは選択肢が広いです。選択肢が多いことはすばらしいことですね。
2013/09/28追記 汎用化コマンド作ってあるよ!
ブクマコメントに cscript ではなく、汎用化がほしいということでしたので。すでにあります!