Проверка, установлен ли ruby ​​gem из скрипта bash

Мне нужно из bash-скрипта проверить, установлены ли определенные Ruby гемы.

Я думал, что могу сделать что-то вроде

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

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

Означает ли это, что мне нужно использовать grep для фильтрации вывода списка драгоценных камней, или есть лучший способ проверить, установлен ли гем?

3 ответа

Решение

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

Для получения дополнительной информации см. gem help list,


Изменить: Riateche правильно заметил, что это может дать ложные срабатывания, если вы ищете имя драгоценного камня, который является подстрокой установленного в противном случае драгоценного камня. Чтобы избежать этого, используйте синтаксис регулярных выражений:

gem list '^<name>$' -i

(Пример: gem list '^mini$' -i).

Похоже, что gem spec Команда не будет выполнена с ошибкой, если указанный гем не установлен. Так:

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

Я не знаю, является ли это каноническим способом решения этого, но это работает.

Вы также можете использовать 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
Другие вопросы по тегам