作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 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`" == ''}
{
阻止打开"
字符串开头==
运算符''
常量空字符串}
结束 block 有很多操作来测试你是否有一个空字符串。反引号的输出不保证真的是空的(例如它可以有一个换行符),然后你将它与任意空字符串(不是 nil,它是一个什么都没有的字符串)进行比较。它有很多变坏的方法,而且很难调试非打印字符。
但是 shell 已经有一个操作符,它是 -z
用于通常的 bash。
引用 bash 文档:
-z string
True if the length of string is zero.
另一个帮助程序是 $()
来评估脚本中的命令
最后一个 [[ ]]
结构告诉我们使用的是运算符而不是命令。
当表示为字符串 (Documentation on guards here) 时,您最终会得到命令执行守卫
not_if '[[ -z $(sudo sh /home/scripts/getStampedDisk.sh test) ]]'
引自守卫文档:
A guard attribute accepts either a string value or a Ruby block value:
- A string is executed as a shell command. If the command returns 0, the guard is applied. If the command returns any other value, then the guard attribute is not applied.
- A block is executed as Ruby code that must return either true or false. If the block returns true, the guard attribute is applied. If the block returns false, the guard attribute is not applied.
如果你不在 guard 中使用 ruby,也不要使用 block,你只是在添加层,这会给你带来麻烦,特别是当你尝试比较不可打印或空字符串时,调试起来更难,如果您需要调用命令或脚本,请尝试坚持使用标准 shell 命令,您可以在控制台中对其进行测试,以确保稍后不会出现问题。
关于bash - 如何在 not_if 条件下使用 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942892/
我是一名优秀的程序员,十分优秀!