如何测试 .ebextensions 中的软件包是否尚未安装?

问题描述 投票:0回答:1

如何检查 Elastic Beanstalk 设置的 .ebextensions 文件夹中是否已安装软件包?我想做的与此命令类似,但我只想在包不存在时运行该命令,而不是在包存在时运行该命令。 commands: install_package: test: rpm -qa | grep -c example_package command: yum install -y example_package.rpm

所以在伪代码中,这就是我所追求的:

commands: install_package: test: not(rpm -qa | grep -c example_package) command: yum install -y example_package.rpm

更新:我已经在没有测试参数的情况下使用了它,而是在命令本身中使用双管道,但它并不像我想要的那么整洁;我宁愿使用测试参数来使其更明确:

commands: install_package: command: rpm -qa | grep -c example_package || { yum install -y example_package.rpm; }


yaml amazon-elastic-beanstalk ebextensions
1个回答
0
投票

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-commands-options

测试

(可选)命令必须返回 true 值(退出代码 0),以便 Elastic Beanstalk 处理该命令,例如命令键中包含的 shell 脚本。

如果您想计算 grep 结果(如您在问题中所写),您可以使用
-eq

(等于)、

-gt
(大于)或
-ge
(大于或等于)进行条件。
3 行或更多行的示例:

commands: install_package: test: | rpm -qa | grep -c example_package) test $? -ge 3 command: yum install -y example_package.rpm

如果您想要 grep 的结果 
found/not found

,您应该使用安静选项

-q, --quiet, --silent
只从 grep 检索
exit code

如果找到模式,grep 返回退出状态 0,表示成功;如果 grep 找不到该模式,则返回 1 作为其退出状态;如果找不到该文件,grep 将返回退出状态 2。

最后,如果您只想在未安装软件包的情况下运行命令,则应该测试 grep 是否返回 1:

commands: install_package: test: | rpm -qa | grep -q example_package test $? -eq 1 command: yum install -y example_package.rpm

© www.soinside.com 2019 - 2024. All rights reserved.