Kiểm tra nếu một viên ngọc ruby ​​được cài đặt từ tập lệnh bash


14

Tôi cần, từ một tập lệnh bash, kiểm tra xem một số viên ngọc Ruby nhất định đã được cài đặt chưa.

Tôi nghĩ rằng tôi có thể làm một cái gì đó như

if ! gem list <name>; then do_stuff; fi

nhưng thử nghiệm trên dòng lệnh bằng cách sử dụng echo $?cho thấy gem list <name>trả về 0 bất kể tên đó có thực sự được tìm thấy hay không.

Điều này có nghĩa là tôi phải sử dụng grep để lọc đầu ra của danh sách đá quý, hoặc có cách nào tốt hơn để tôi có thể kiểm tra xem đá quý có được cài đặt không?

Câu trả lời:


26

gem list <name> -isẽ trả về chuỗi truenếu gem được cài đặt và falsenếu không. Ngoài ra, mã trả lại là những gì bạn mong đợi.

Để biết thêm thông tin, xem gem help list.


Chỉnh sửa: @Riateche quan sát chính xác rằng điều này có thể cho kết quả dương tính giả nếu bạn tìm kiếm tên đá quý là chuỗi con của đá quý được cài đặt khác. Để tránh điều này, hãy sử dụng cú pháp regex:

gem list '^<name>$' -i

(Ví dụ gem list '^mini$' -i:).


1
Để kiểm tra xem một phiên bản cụ thể đã được cài đặt chưa, chỉ cần thêm --version, ví dụ : gem list -i compass --version 0.12.4.
moeffju

6

Có vẻ như gem speclệnh sẽ thất bại với lỗi nếu đá quý có tên không được cài đặt. Vì thế:

if ! gem spec <name> > /dev/null 2>&1; then
  echo "Gem <name> is not installed!"
fi

Tôi không biết liệu đây có phải là cách giải quyết chính tắc hay không, nhưng nó hoạt động.


3

Bạn cũng có thể sử dụng lệnh queryphụ cho gemlệnh.

$ gem query -i -n bundler 
true
trích đoạn sử dụng
$ gem help query
Usage: gem query [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -I                               Equivalent to --no-installed
    -v, --version VERSION            Specify version of gem to query
                                     for use with --installed
    -n, --name-matches REGEXP        Name of gem(s) to query on matches the
                                     provided REGEXP

Cũng sẽ tìm kiếm các phiên bản cụ thể, sử dụng -vchuyển đổi.

$ gem query -i -n bundler -v 1.6.2.1
false

1
Xin lỗi về downvote, nhưng như đã nêu trong trang man cho gem query: "Lệnh truy vấn là cơ sở cho danh sách và lệnh tìm kiếm. Bạn thực sự nên sử dụng danh sách và lệnh tìm kiếm thay thế. Lệnh này quá khó sử dụng." ... không muốn tạo thói quen xấu trong cộng đồng SO! :-)
pvandenberk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.