如何在notif条件下使用shell脚本



我想使用shell脚本输出来验证处于保护状态的资源。我使用下面的代码仍然不起作用。

bash "stampDisksuccess" do
code <<-EOH
whoami
EOH
user 'root'
not_if {"`sudo sh /home/scripts/getStampedDisk.sh test`" == ''}
end

无论脚本(getStampedDisk.sh)返回的是空白消息还是一些数据,bash资源都将被执行。当脚本返回空白数据时,我期望它不应该运行。

如果有什么遗漏,请纠正我。

让我们剖析一下:

not_if {"`sudo sh /home/scripts/getStampedDisk.sh test`" == ''}
  • 没有if。。。很明显,是警卫
  • {分块
  • "字符串打开
  • 回溯打开
  • 命令
  • 结束倒钩和报价
  • ==操作员
  • ''常量空字符串
  • }合闸块

这是一个测试空字符串的大量操作。backticks的输出不能保证真的是空的(例如,它可以有一个换行符),然后将其与任意的空字符串(不是nil,它是一个什么都没有的字符串)进行比较。它有很多方法会变得糟糕,并且很难调试非打印字符。

然而,shell已经有了一个运算符,它是用于普通bash的-z

引用bash文档:

-z string
True if the length of string is zero.

另一个助手是$(),用于评估脚本中的命令

最后一个是[[ ]]构造,告诉我们使用的是运算符而不是命令。

总之,当用字符串表示时,您最终会得到命令执行保护(此处为有关保护的文档)

not_if '[[ -z $(sudo sh /home/scripts/getStampedDisk.sh test) ]]' 

来自卫士文档的报价:

保护属性接受字符串值或Ruby块值:

  • 字符串作为shell命令执行。如果命令返回0应用防护。如果该命令返回任何其他值,则未应用guard属性
  • 一个块作为Ruby代码执行必须返回true或false。如果block返回true,则guard属性。如果块返回false,则guard属性未应用

如果你在保护中不使用ruby,不使用块,你只是在添加层,这会给你带来麻烦,特别是当你试图比较不可打印或空字符串,并且很难调试时,如果你需要调用命令或脚本,试着使用标准的shell命令,你可以在控制台中测试它,并确保以后不会出现问题。

相关内容

  • 没有找到相关文章

最新更新