Ruby で which 書いてみた
which[q-e-d.net] ってのは、コマンドのパスを調べるコマンドなんだって〜。
偶然、whichコマンドを作る[atmarkit.co.jp] なんてページを発見したので、
Ruby で書き直そうと思う。
bat バージョンがこちら:
@echo off for %%I in (%1 %1.com %1.exe %1.bat %1.cmd %1.vbs %1.js %.wsf) if exists %%~$path:I echo %%~$path:I
環境変数である PATH には、「パスを通」されてる絶対パスが `;' で区切られて入ってる。
だから、指定された実行可能な(プログラム|スクリプト)名を調べるには、そのパスを巡回していって、検索していけばいいわけだ。
ってのが解ったので Ruby で書いてみた:
# encoding: shift_jis if ARGV.length > 0 then target_name = ARGV[0] paths = ENV["PATH"].split( /;/ ).collect { |x| x.gsub( /\\/, "/" ) } pattern = Regexp.compile( "^#{target_name}\.(com|exe|bat|cmd|vbs|js|wsf)?$" ) paths.each do |path| Dir.foreach(path) do |file| unless (file =~ pattern).nil? then puts "/#{path.gsub(/\\/, '/')}/#{file}" exit # -- (1) end end end end
ちょっとだけ解決編
*1:アクセスのこと