Перевірка, чи встановлено рубіновий камінь із скрипту bash


14

Мені потрібно зі сценарію bash перевірити, чи встановлені певні дорогоцінні камені Ruby.

Я думав, що можу зробити щось на кшталт

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

але тестування в командному рядку за допомогою echo $?показує, що gem list <name>повертає 0 незалежно від того, чи дійсно знайдено ім'я.

Чи означає це, що мені потрібно використовувати grep для фільтрації списку дорогоцінних каменів, чи є кращий спосіб я перевірити, чи встановлено дорогоцінний камінь?

Відповіді:


26

gem list <name> -iповерне рядок, trueякщо дорогоцінний камінь встановлений falseінакше. Крім того, зворотні коди - це те, що ви очікували.

Для отримання додаткової інформації див gem help list.


Редагувати: @Riateche правильно зауважив, що це може дати помилкові позитиви, якщо ви шукаєте ім'я дорогоцінного каміння, яке є підрядком інстальованого дорогоцінного каміння. Щоб уникнути цього, використовуйте синтаксис регулярного вираження:

gem list '^<name>$' -i

(Приклад:) gem list '^mini$' -i.


1
Щоб перевірити, встановлена чи конкретна версія, просто додати --version, наприклад: gem list -i compass --version 0.12.4.
moeffju

6

Схоже, що gem specкоманда вийде з помилкою, якщо названий дорогоцінний камінь не встановлений. Так:

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

Я не знаю, чи це канонічний спосіб вирішення цього питання, але це працює.


3

Ви також можете використовувати queryпідкоманду для gemкоманди.

$ gem query -i -n bundler 
true
використання витягу
$ 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

Також буде шукати конкретні версії, використовуючи -vперемикач.

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

1
Вибачте за знищення, але як зазначено на сторінці man для gem query: "Команда запитів є основою для списку та команд пошуку. Натомість вам слід використовувати команди для пошуку списку та пошуку. Ця команда занадто важка для використання." ... не хочу створювати шкідливих звичок у спільноті SO! :-)
pvandenberk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.