如何检查bash脚本中安装的composer软件包

时间:2019-05-26 03:39:30

标签: php bash composer-php

如果未在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

2 个答案:

答案 0 :(得分:1)

这里有两个误解:

  1. 您无法通过管道将内容传送到test
  2. 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