如何检查 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; }
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