1

我正在尝试使用 mysql 中的 exec 克隆一个数据库,但如果它已经被克隆,我不想克隆它。

exec { "clone_from_${name}" :
  unless => "/usr/bin/mysql -u${user_to} -p${pwd_to} ${name_to} -e'select count(*) from $test_table_name;' | grep -c ' 0 '",
...

逻辑看起来有点混乱,但基本上,我理解的方式是,如果命令返回 0,那么整个 exec 将不会运行。但是当我尝试它时,它是。

db 已经在 vm 中创建,如果它已经被克隆,则从查询返回的计数给我的不是“0”,而 grep 因为找不到“0”而返回 0。除非应该让它运行,对吧?

输出甚至给了我“除非:0”,然后是“执行

谢谢。

4

1 回答 1

4

重要的是退出代码,而不是打印的数字。

如果您手动运行此命令并echo $?随后执行,您将获得退出代码。

此外,您想隐藏命令的输出:

exec { "clone_from_${name}" :
  unless => "/usr/bin/mysql -u${user_to} -p${pwd_to} ${name_to} -e'select count(*) from $test_table_name;' | grep ' 0 ' > /dev/null 2>&1",
...
于 2013-06-14T05:16:29.960 回答