与平台无关的检测git是否已安装的方法

时间:2011-01-04 19:21:44

标签: ruby windows git shell detect

这是我在ruby中检测git的方法:

`which git 2>/dev/null` and $?.success?

然而,这不是跨平台的。它在非unix系统或没有which命令的系统上失败(虽然我不确定它们是什么)。

我需要一种方法来检测满足这些条件的git:

  1. 可靠地跨平台工作,即使在Windows上也是如此
  2. 不会向$ stdout或$ stderr
  3. 输出任何内容
  4. 少量代码

  5. 更新:解决方案是避免完全使用which并在Windows上将输出重定向到NUL

    require 'rbconfig'
    void = RbConfig::CONFIG['host_os'] =~ /msdos|mswin|djgpp|mingw/ ? 'NUL' : '/dev/null'
    system "git --version >>#{void} 2>&1"
    

    system命令在成功时返回true,在失败时返回false,从而节省了使用反引号时所需的$?.success?行程。

4 个答案:

答案 0 :(得分:4)

Windows上没有/dev/null这样的东西。

我们在不同项目中采用的一种方法是根据NULL定义RbConfig::CONFIG['host_os']

NULL = RbConfig::CONFIG['host_os'] =~ /mingw|mswin/ ? 'NUL' : '/dev/null'

然后使用它将STDOUT和STDERR重定向到它。

至于哪一项,我在my blog

上做了一个简单的参考

但是,如果您只想检查git存在而不是位置,则无需执行此操作,通过简单的系统调用并检查结果$?就足够了。

希望这有帮助

答案 1 :(得分:1)

答案 2 :(得分:0)

也许在JRuby上运行并使用JGit可以选择真正独立于平台。

答案 3 :(得分:0)

我想,你需要这样做:

  1. 检查机器是否为基于unix的机器
  2. 如果是Unix,请使用which
  3. 如果是Windows,Is there an equivalent of 'which' on windows?