Вот как я обнаруживаю мерзавца в ruby:
`which git 2>/dev/null` and $?.success?
Однако это не кроссплатформенность. Он не работает в не-Unix системах или в тех, у которых нет команды which
(хотя я не уверен, что это такое).
Мне нужен способ обнаружения git, который удовлетворяет этим условиям:
- надежно работает кроссплатформенно, даже на Windows
- ничего не выводит в $ stdout или $ stderr
- небольшое количество кода
Обновление: решение состоит в том, чтобы вообще не использовать which
и перенаправить вывод на NUL
в Windows.
require 'rbconfig'
void = RbConfig::CONFIG['host_os'] =~ /msdos|mswin|djgpp|mingw/ ? 'NUL' : '/dev/null'
system "git --version >>#{void} 2>&1"
Команда system
возвращает true при успехе и false при сбое, сохраняя нам поездку на $?.success?
, которая необходима при использовании обратных галочек.