bash测试cmd失败,参数太多

bash测试cmd失败,参数太多,bash,testing,puppet,Bash,Testing,Puppet,在Puppet资源调配中,我确实遇到了一些问题,这些问题会导致Puppet在每一轮都运行。它是使用perodic cron作业执行的无主配置 exec { 'postgresql::server::database::action1': command => "sudo -u postgres psql -d ${db_name} -a -f /opt/folderx/v2/createdb.sql", path => '/usr/pgsql-

在Puppet资源调配中,我确实遇到了一些问题,这些问题会导致Puppet在每一轮都运行。它是使用perodic 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",
    }
问题:哪种语法仅适用于测试?在bash shell中,我将获得:

bash:test:参数太多


基本上,我需要测试在给定的$dbame中是否存在一些表和函数
postgres psql-d…
是否将某些内容打印到屏幕上?如果是,则将其输出作为参数传递到
测试
。要隐藏输出,可以使用
…>/dev/null

test$(someCommand;echo$?)-ne 0
过于复杂,只需编写
!someCommand
。这样,您可能就不必重定向输出了

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

postgres psql-d…
是否在屏幕上打印内容?如果是,则将其输出作为参数传递到
测试
。要隐藏输出,可以使用
…>/dev/null

test$(someCommand;echo$?)-ne 0
过于复杂,只需编写
!someCommand
。这样,您可能就不必重定向输出了

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

在bash中,正确的postgres语法是。但是它不能与test cmd一起工作。。无论如何,您的代码示例确实帮助了我,puppet将不再调用exec funcs。我将很快进行反向测试,但似乎有效。另一种解决方案是仅在文件内容发生更改时运行脚本…`bash中的文件“{”/opt/folderx/v2/createdb.sql”:audit=>'content'}`和正确的postgres语法是。但是它不能与test cmd一起工作。。无论如何,您的代码示例确实帮助了我,puppet将不再调用exec funcs。我将很快进行反向测试,但似乎有效。另一种解决方案是仅在文件内容发生更改时运行脚本…`文件{“/opt/folderx/v2/createdb.sql”:audit=>'content'}`