bash 测试 cmd 失败,参数过多

标签 bash testing puppet

在 Puppet 配置中,我确实遇到了导致 Puppet 每次都运行的问题。它是使用周期性 cron 作业执行的无主配置。

 exec { 'postgresql::server::database::action1':
        command => "sudo -u postgres psql -d ${db_name} -a -f /opt/folderx/v2/createdb.sql",
        path    => '/usr/pgsql-9.5/bin:/usr/bin:/bin',
        user    => 'root',
        onlyif  => "test $(sudo -u postgres psql -d ${db_name} -c 'SELECT version();' ; echo $?) -ne 0",
    }

问题是 onlyif 测试的正确语法是什么?在 bash shell 中我会得到:

bash: test: too many arguments

基本上我需要测试给定的 $dbame 中是否存在一些表和函数

最佳答案

postrgres psql -d ... 是否在屏幕上打印了一些东西?如果是,则其输出作为参数传递给 test。要隐藏输出,您可以使用 ... >/dev/null 重定向它。

test $(someCommand; echo $?) -ne 0 过于复杂,只写!一些命令。这样您可能也不必重定向输出。

onlyif  => "! sudo -u postgres psql -d ${db_name} -c 'SELECT version();' > /dev/null",

关于bash 测试 cmd 失败,参数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46896392/

相关文章:

linux - windows环境下运行Linux Shell脚本

ruby - 如何用Puppet和ruby打印所有linux用户?

selenium - 规范远程时如何运行 Protractor 测试

java - IntelliJ 无法解析 gradle java 跨模块测试依赖

testing - 通过规范轻松进行验收测试

ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError)

regex - 在 Perl 中将一个正则表达式与另一个正则表达式进行匹配

c++ - cygwin : sometimes unix style paths 上的 gcc -MM

bash - 为什么 cURL 输出进程名称?以及如何摆脱它?

string - 打印没有最后一个换行符的 bash 变量