“which in ruby​​”:检查程序是否存在于来自ruby的$PATH中

我的脚本严重依赖外部程序和脚本。
我需要确保一个我需要调用的程序存在。
手动,我会在命令行中使用’which’检查。

有相当于File.exists吗?对于$ PATH中的东西?

(是的我想我可以解析%x [这个scriptINeedToRun],但这不是超优雅。

谢谢!
yannick

更新:这里是我保留的解决方案:

 def command?(command)
       system("which #{ command} > /dev/null 2>&1")
 end

更新2:几个新的答案进来了 – 至少有一些提供更好的解决方案。

更新3:ptools gem为File类添加了一个“which”方法。

真正的跨平台解决方案,在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 { |ext|
      exe = File.join(path, "#{cmd}#{ext}")
      return exe if File.executable?(exe) && !File.directory?(exe)
    }
  end
  return nil
end

这不使用主机操作系统嗅探,并尊重$ PATHEXT,其中列出Windows上可执行文件的有效文件扩展名。

炮轰对许多系统的工作,但不是所有。

http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:“which in ruby​​”:检查程序是否存在于来自ruby的$PATH中