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

mis*_*lav 6 ruby windows git shell detect

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

`which git 2>/dev/null` and $?.success?
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

Lui*_*ena 4

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

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

NULL = RbConfig::CONFIG['host_os'] =~ /mingw|mswin/ ? 'NUL' : '/dev/null'
Run Code Online (Sandbox Code Playgroud)

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

至于这个,我在我的博客上做了一个简单的参考

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

希望这可以帮助