プログラムがPATHのどこにあるか調べるのに
- Windowsならwhere
- Unix なら whereis
を使います。
Cygwinからは両方が使えますが。それぞれに一長一短があります。
- where.exe はWindows形式のPATHが出力される(c:\users..)
- whereisは UNIXのPATHしか出してくれない。(cygdriveは検索対象外)
windowsのwhere コマンド
windowsにはwhere コマンドがあって、コマンドがどこにあるかPATHを調べてくれる
takuya@letsnote:~$ where find C:\Users\Public\apps\cygwin\bin\find.exe C:\Windows\System32\find.exe
Cygwinで使うには、Windows形式のpathなので不便を感じます。
両方のいいとこ取りをしたい
- WindowsのPATHも検索
- cypath形式で表示
するような、いいとこ取りの、Whereコマンドを作ることを思いつきました。
whereコマンドをベースにwhereis コマンドを作れる。
whereis コマンドを作り、内部的にwhere コマンドを実行し、cygpath経由でパスを変換することにしました。aliasを使うと引数が解釈されないので、Bashを使う私は、Aliasの代わりにfunction(関数)を使うことにしました。
aliaseのための関数
function whereis(){ where $@ | nkf -w | cygpath -u -f - }
そのほかの、
/bin/whereis ファイルを作る
/bin/whereis
#!/bin/sh where $@ | nkf -w | cygpath -u -f -
実行結果
takuya@letsnote:~$ whereis find /usr/bin/find.exe /cygdrive/c/Windows/System32/find.exe
Whereisがcypath形式になりました。UTF-8化されてて便利です。cygpathイイですね。