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:
更新:解决方案是避免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?使用反引号时所需的行程.
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 的存在而不是位置,则无需执行任何操作,只需进行简单的系统调用并检查结果$?就足够了。
希望这可以帮助