我的脚本在很大程度上依赖于外部程序和脚本。
我需要确保我需要调用的程序存在。
手动地,我会在命令行中使用“哪个”来检查。File.exists?中的内容是否与$PATH等效?
(是的,我想我可以解析%x[which scriptINeedToRun],但这不是 super 优雅。
谢谢!
扬尼克

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

 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 do |ext|
      exe = File.join(path, "#{cmd}#{ext}")
      return exe if File.executable?(exe) && !File.directory?(exe)
    end
  end
  nil
end

这不使用主机操作系统嗅探,而是遵守$ PATHEXT,它列出了Windows上可执行文件的有效文件扩展名。

掏出which可以在许多系统上使用,但不是全部。

关于ruby - “which in ruby”:从Ruby检查$ PATH中是否存在程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2108727/

10-12 18:43