bash test cmd因args太多而失败

时间:2017-10-23 18:45:49

标签: bash testing 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

中是否存在一些表和函数

1 个答案:

答案 0 :(得分:2)

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

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

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