ten sposób wykryć git w Ruby:Platforma niezależny sposób wykrywania, jeśli jest zainstalowany git
`which git 2>/dev/null` and $?.success?
Jednak to nie jest cross-platform. Nie działa na systemach innych niż systemy uniksowe lub bez komendy which
(chociaż nie jestem pewien, co to jest).
Potrzebuję sposób wykryć git, który spełnia następujące warunki:
- działa niezawodnie cross-platform, nawet na Windows
- nie robi nic wyjściowego $ stdout lub stderr $
- niewielka ilość kodu
Aktualizacja: rozwiązanie jest aby całkowicie nie używać which
i przekierować wyjście do NUL
w systemie Windows.
require 'rbconfig'
void = RbConfig::CONFIG['host_os'] =~ /msdos|mswin|djgpp|mingw/ ? 'NUL' : '/dev/null'
system "git --version >>#{void} 2>&1"
W system
dowodzenia Zwraca TRUE w przypadku sukcesu, FALSE w przypadku porażki, oszczędzając nam wycieczkę do $?.success?
które jest potrzebne do korzystania odwrócone, pojedyncze apostrofy.
Może http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby/ 2108757 # 2108757 może pomóc? – VonC
Przebaczam moją potencjalną głupotę, ale nie "która" pisze na stdout? –
@Steven: oczywiście, ale w swojej własnej podpowiedzi, i widzisz, że użyłem backticków, które przechwytują to wyjście w wartości zwrotnej, którą następnie odrzucam. Jeśli 'który' napisał coś do STDERR, ruby przekazałby to do $ stderr programu głównego (coś, czego nie chcę się wydarzyć), więc użyłem' 2>/dev/null' aby to obsłużyć. – mislav