因此,命令属性只是命令的名称,而不是要运行的完整代码。对于bash资源(以及所有其他脚本资源),应使用code: 要执行的带引号(“”)的代码字符串。
command: 要执行的命令的名称。默认值:资源块的名称(请参见上面的语法部分)。
code
属性发送要执行的代码。bash "create folder" do
code "mkdir -p /home/user/folder"
not_if {::File.directory?("/home/user/folder")}
end
事实上,command
属性的内容在那里并没有被使用到,它只是因为脚本资源继承自execute
资源,从而继承了所有可能的属性。
最后要提醒的是,在创建目录时,应该使用内置于Chef的实际惯用directory
资源,而不是像这样使用bash脚本:
directory "/home/user/folder" do
recursive true
end
name
是资源块的名称;当command
属性未作为配方的一部分指定时,name
也是要执行的命令的名称”。并且它们在:run
下面的:nothing
的文本也是相同的。这真让人沮丧。 - Zook
mkdir
命令,你应该立刻知道它的作用。当传输文件和启动服务更容易时,我使用chef资源,而不是编写相应的bash脚本,但已经是幂等的一行代码(-p
选项确保了这一点,我实际上不需要保护)比阅读破碎的文档更快。我理解你的观点,但bash可以很好地处理文件系统交互,并且我可以轻松地使用保护来确保幂等性,就像它们的本意一样。 - Zookexecute
资源是否在幕后将其command
翻译成代码?脚本资源继承属性但不继承功能,这很奇怪。 - Zook