my scripts rely heavily on external programs and scripts. I need to be sure that a program I need to call exists. Manually, I'd check this using 'which' in the commandline.
Is there an equivalent to File.exists? for things in $PATH?
(yes I guess I could parse %x[which scriptINeedToRun] but that's not super elegant.
Thanks! yannick
UPDATE: Here's the solution I retained:
 def command?(command)        system("which #{ command} > /dev/null 2>&1")  end  True cross-platform solution, works properly on Windows:
# Cross-platform way of finding an executable in the $PATH. # #   which('ruby') #=> /usr/bin/ruby def which(cmd)   exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']   ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|     exts.each do |ext|       exe = File.join(path, "#{cmd}#{ext}")       return exe if File.executable?(exe) && !File.directory?(exe)     end   end   nil end   This doesn't use host OS sniffing, and respects $PATHEXT which lists valid file extensions for executables on Windows.
Shelling out to which works on many systems but not all.
Use find_executable method from mkmf which is included to stdlib.
require 'mkmf'  find_executable 'ruby' #=> "/Users/narkoz/.rvm/rubies/ruby-2.0.0-p0/bin/ruby"  find_executable 'which-ruby' #=> nil 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With