それマグで!

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

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

where.exe コマンド を whereisとしてBashから使う。

プログラムが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なので不便を感じます。

cygwinの whreis コマンド

whereisはutil-linuxを入れれば付属してきます、

takuya@letsnote:~$ whereis.exe find
find: /bin/find.exe /usr/bin/find.exe
 /usr/share/man/man1/find.1.gz 
 /usr/share/man/mann/find.n.gz

unix形式のPATHが返ってきて、一見良さそうに見えますが、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イイですね。