Проверка, установлен ли 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