Can';t将bash命令嵌入到厨师食谱中
我试图在我的厨师食谱中嵌入一个shell命令,但是当厨师执行该命令时,它似乎出错了。以下是相关资源:Can';t将bash命令嵌入到厨师食谱中,bash,chef-infra,Bash,Chef Infra,我试图在我的厨师食谱中嵌入一个shell命令,但是当厨师执行该命令时,它似乎出错了。以下是相关资源: script "create libs symlink" do interpreter "bash" user "root" cwd "/home/robin/test" code <<-EOH ln -s $(ls -1 | grep '^[0-9.-]\+$') curr-version-libs EOH end 看起来$(ls-1 | grep'^[0-9
script "create libs symlink" do
interpreter "bash"
user "root"
cwd "/home/robin/test"
code <<-EOH
ln -s $(ls -1 | grep '^[0-9.-]\+$') curr-version-libs
EOH
end
看起来$(ls-1 | grep'^[0-9.-]+$)正在被删除,我将使用命令ln-s curr version libs
有人知道这里发生了什么吗?我尝试过使用
execute
资源,但得到了相同的结果。您尝试过转义美元符号吗
ln -s \$(ls -1 | grep '^[0-9.-]\+$') curr-version-libs
如果您的19.26-3目录在chef run开始之前就存在,那么就很容易了。如果您正在创建一个符号链接,我建议使用link资源
version = `ls /home/robin/test/ -1 | grep '^[0-9.-]+$'`.strip
link "/home/robin/test/curr-version-libs" do
to ::File.join( "/home/robin/test", version )
end
但如果没有,我建议使用ruby_块并动态定义链接资源
ruby_block "create libs symlink" do
block do
version = `ls /home/robin/test/ -1 | grep '^[0-9.-]+$'`.strip
res = Chef::Resource::Link.new( "/home/robin/test/curr-version-libs", run_context )
res.to ::File.join( "/home/robin/test", version )
res.run_action :create
end
end
编辑:在按照Robin的建议分配到版本之前,我通过修复正则表达式和调用strip更正了答案。似乎您正在调用shell来创建sym链接。在这种情况下,更好的方法是使用。我永远不会使用脚本或执行资源来做您正在做的事情 使用链接资源,您可以执行以下操作:
link "/home/robin/test/curr-version-libs" do
to '/home/robin/test/19.26-3'
user 'root'
group 'root'
link_type :symbolic
action :create
end
一个简短的旁白:我已经指导和辅导了很多人来学习厨师。那些理解了资源、提供者和轻量级资源(aka.LWRPs)提供了什么的人比那些只想把旧的shell脚本放到烹饪书中的人更快乐、更有效
我强烈建议您阅读和文档是的,我已经尝试过两种方法,但没有区别。我也尝试过使用backticks,同样,如果
grep
在命令运行时与任何内容都不匹配,那么扩展将被有效删除。您确定该目录当时存在,并且以后不是由另一个厨师菜谱创建的吗?您可以执行ls-l>ls\u快照
,然后检查ls\u快照以查看当时有哪些文件。这样看起来可以正常工作-我明天试一试,现在告诉您我的进展情况。谢谢好的,你的第二个建议结果是赢家——第一个以错误的顺序执行。此外,我还必须从正则表达式中删除反斜杠,并且必须执行version=version.delete(“\n”)
,以从链接名中删除拖尾垃圾。再次感谢!为什么只建议对符号链接使用链接资源?此外,使用Ruby Core或标准库类,代码中执行的所有命令行操作都可以更容易地以可移植的方式执行。我从来没有说过,我只建议将其用于符号链接。这是创建任何链接的方法,甚至在windows节点上也是如此。关于命令行操作,可以使用Ruby执行。我不太擅长ruby,只是复制了操作代码。我想你可以详细说明一下,并提供你自己对这个问题的答案。
link "/home/robin/test/curr-version-libs" do
to '/home/robin/test/19.26-3'
user 'root'
group 'root'
link_type :symbolic
action :create
end