Đây là cách tôi phát hiện git trong ruby:cách Nền tảng độc lập phát hiện nếu git được cài đặt
`which git 2>/dev/null` and $?.success?
Tuy nhiên, đây không phải là cross-platform. Nó không thành công trên các hệ thống không unix hoặc những người không có lệnh which
(mặc dù tôi không chắc chắn những gì đang có).
Tôi cần một cách để phát hiện git thỏa mãn các điều kiện:
- tác phẩm đáng tin cậy cross-platform, ngay cả trên Windows
- không làm bất cứ điều gì ra đến $ stdout hoặc $ stderr
- lượng nhỏ mã
cập nhật: giải pháp là để tránh sử dụng hoàn toàn which
và chuyển hướng đầu ra tới NUL
trên Windows.
require 'rbconfig'
void = RbConfig::CONFIG['host_os'] =~ /msdos|mswin|djgpp|mingw/ ? 'NUL' : '/dev/null'
system "git --version >>#{void} 2>&1"
Các system
lệnh trả về đúng trên thành công và sai về thất bại, tiết kiệm cho chúng tôi các chuyến đi đến $?.success?
đó là cần thiết khi sử dụng backticks.
lẽ http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby/ 2108757 # 2108757 có thể giúp bạn? – VonC
Hãy tha thứ cho sự ngu xuẩn tiềm ẩn của tôi, nhưng không phải là 'cái gì' viết cho sự kiệt sức? –
@Steven: tất nhiên là có, nhưng trong chính vỏ bọc của nó, và bạn có thể thấy rằng tôi đã sử dụng backticks để thu được đầu ra đó trong một giá trị trả về mà sau đó tôi loại bỏ. Nếu 'which' đã viết gì đó cho STDERR, ruby sẽ chuyển tiếp tới $ stderr của chương trình chính (cái gì đó tôi không muốn xảy ra) vì vậy tôi đã sử dụng' 2>/dev/null' để xử lý điều đó. – mislav