如果未在bash脚本中安装composer软件包,我正在尝试安装。但是现在它不起作用了,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
答案 0 :(得分:1)
这里有两个误解:
test
。if some_command
是命令成功执行操作的方法。 [ no_package ]
实际上并不运行命令,它只是检查字符串“ no_package”是否为空,因此总是成功。除此之外,您可能希望对--quiet
使用grep
标志,以避免打印软件包名称。
答案 1 :(得分:1)
我测试了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