您好我在厨师食谱中使用sed命令,但它的抛出错误。但是,如果我在CLI上运行sed命令就行了。任何帮助赞赏。
我的sed命令是 -
sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml
我的主厨食谱是 -
bash "change_bigsqluser" do
user "root"
code <<-EOH
sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml
EOH
end
这是错误
Error executing action `run` on resource 'bash[change_bigsqluser]'
================================================================================
Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20140807-4025602-160wvt2" ----
STDOUT:
STDERR: sed: -e expression #1, char 15: unknown command: `B'
---- End output of "bash" "/tmp/chef-script20140807-4025602-160wvt2" ----
Ran "bash" "/tmp/chef-script20140807-4025602-160wvt2" returned 1
Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/biginsights/recipes/temp.rb
22: bash "change_bigsqluser" do
23: user "root"
24: code <<-EOH
25: sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml
26: EOH
27: end
Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/biginsights/recipes/temp.rb:22:in `from_file'
bash("change_bigsqluser") do
action "run"
retries 0
retry_delay 2
guard_interpreter :default
command "\"bash\" \"/tmp/chef-script20140807-4025602-160wvt2\""
backup 5
returns 0
user "root"
code "sed -i -e \"/<BigSQL>/,/</BigSQL>/ s|<username>[0-9a-z.]{1,}</username>|<username>bigsql</username>|\" /home/biadmin/install.xml\n"
interpreter "bash"
cookbook_name "biginsights"
recipe_name "temp"
end
[2014-08-07T04:25:49-07:00] INFO: Running queued delayed notifications before re-raising exception
Running handlers:
[2014-08-07T04:25:49-07:00] ERROR: Running exception handlers
Running handlers complete
[2014-08-07T04:25:49-07:00] ERROR: Exception handlers complete
[2014-08-07T04:25:49-07:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 7.374318882 seconds
[2014-08-07T04:25:49-07:00] ERROR: bash[change_bigsqluser] (biginsights::temp line 22) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20140807-4025602-160wvt2" ----
STDOUT:
STDERR: sed: -e expression #1, char 15: unknown command: `B'
---- End output of "bash" "/tmp/chef-script20140807-4025602-160wvt2" ----
Ran "bash" "/tmp/chef-script20140807-4025602-160wvt2" returned 1
[2014-08-07T04:25:49-07:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
答案 0 :(得分:3)
由于您只执行一个命令并且您没有使用任何bash功能,我会使用execute
资源:
execute "Do some sed" do
command "sed -i '/<BigSQL>/,/</BigSQL>/ s|<username>[0-9a-z.]{1,}</username>|<username>bigsql</username>|' /home/biadmin/install.xml"
action :run
end
答案 1 :(得分:0)
由于这是谷歌的第一个结果,我认为我已经为完整性提供了答案。
如果您查看已编译的资源,代码就会像这样开始:
sed -i -e \"/<BigSQL>/,/</BigSQL>/
问题在于逃避。只需将code <<-EOH
更改为code <<-'EOH'
:
bash "change_bigsqluser" do
user "root"
code <<-'EOH'
sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml
EOH
end