Я пытаюсь установить пакет композитора, если он не установлен в сценарии 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






Здесь есть два недоразумения:
test.if some_command — это способ что-то сделать, если команда выполнена успешно. [ no_package ] на самом деле не запускает команду, он просто проверяет, что строка «no_package» не пуста и поэтому всегда завершается успешно.В дополнение к этому вы можете использовать флаг --quiet для grep, чтобы не печатать имя пакета.
Я протестировал команду 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