"which in ruby": Checking if program exists in $PATH from ruby
True cross-platform solution, works properly on Windows:
# Cross-platform way of finding an executable in the $PATH.## which('ruby') #=> /usr/bin/rubydef 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 nilend
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