Как проверить, что пакет composer установлен в скрипте bash - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь установить пакет composer, если он не установлен в bash-скрипте. Но теперь это не работает, и функция no_package всегда проходит

#!/bin/bash -e

no_package() {
    composer show | grep matchish/laravel-scout-elasticsearch | test
}

if [ no_package ]; then
  composer require "matchish/laravel-scout-elasticsearch"
else
  echo 'Package installed'
fi

UPD: вот решение

package_installed() {
    composer show | grep matchish/laravel-scout-elasticsearch --quiet
}
if package_installed; then
  echo 'Package installed'
else
  composer require "matchish/laravel-scout-elasticsearch"
fi

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Я протестировал команду test и обнаружил, что команда test вернула один и тот же результат независимо от того, что я передал.

Так что лучше выполнить таким образом

package_exist() {
    composer show | grep matchish/laravel-scout-elasticsearch >/dev/null
}

if package_exist; then
    echo 'installed'
else
    echo 'uninstalled'
    echo 'installing matchish/laravel-scout-elasticsearch'
    composer require "matchish/laravel-scout-elasticsearch"
fi
1 голос
/ 26 мая 2019

Здесь есть два недоразумения:

  1. Вы не можете перенаправить материал на test.
  2. if some_command - это способ что-то сделать, если команда выполнена успешно.[ no_package ] на самом деле не запускает команду, она просто проверяет, что строка "no_package" не пуста и поэтому всегда завершается успешно.

В дополнение к этому вы можете захотеть использовать --quietустановите флажок grep, чтобы избежать печати имени пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...