"which in ruby": Checking if program exists in $PATH from ruby "which in ruby": Checking if program exists in $PATH from ruby unix unix

"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


def command?(name)  `which #{name}`  $?.success?end

Initially taken from hub, which used type -t instead of which though (and which failed for both zsh and bash for me).