厨师食谱 - 用 sed 命令替换 Linux 文件中的文本(接收错误)
chef recipe - replace text in Linux file with sed command (receiving errors)
我在厨师食谱中使用以下代码:
bash 'replace_text' do
cwd ::File.dirname('/data01/nodemanager/bin')
code <<-EOH
sed 's/NODEMGR_HOME=.*/NODEMGR_HOME="\/data01\/nodemanager"/g' startNodeManager.sh
EOH
end
我要替换的文本是包含位于 /data01/nodemanager/bin
的 NODEMGR_HOME=
startNodeManager.sh
行中的所有内容
当 运行 食谱时,我收到以下输出:
Running handlers:
[2017-11-21T23:58:22+00:00] ERROR: Running exception handlers
[2017-11-21T23:58:22+00:00] ERROR: Running exception handlers
Running handlers complete
[2017-11-21T23:58:22+00:00] ERROR: Exception handlers complete
[2017-11-21T23:58:22+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 01 seconds
[2017-11-21T23:58:22+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
[2017-11-21T23:58:22+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
[2017-11-21T23:58:22+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2017-11-21T23:58:22+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2017-11-21T23:58:22+00:00] ERROR: bash[replace_text] (domain-test::sed2 line 1) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
STDOUT:
STDERR: sed: -e expression #1, char 34: unknown option to `s'
---- End output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
Ran "bash" "/tmp/chef-script20171121-11258-vwwwm6" returned 1
[2017-11-21T23:58:22+00:00] ERROR: bash[replace_text] (domain-test::sed2 line 1) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
STDOUT:
STDERR: sed: -e expression #1, char 34: unknown option to `s'
---- End output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
Ran "bash" "/tmp/chef-script20171121-11258-vwwwm6" returned 1
[2017-11-21T23:58:22+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
[2017-11-21T23:58:22+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>> Converge failed on instance <default-ubuntu-1404>. Please see .kitchen/logs/default-ubuntu-1404.log for more details
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration
您的反斜杠转义级别不够。请记住,它首先是 Ruby 字符串,然后是 bash 字符串,然后是 sed 参数。您也可以使用 line
或 poise-file
食谱来回避整个问题。
我在厨师食谱中使用以下代码:
bash 'replace_text' do
cwd ::File.dirname('/data01/nodemanager/bin')
code <<-EOH
sed 's/NODEMGR_HOME=.*/NODEMGR_HOME="\/data01\/nodemanager"/g' startNodeManager.sh
EOH
end
我要替换的文本是包含位于 /data01/nodemanager/bin
NODEMGR_HOME=
startNodeManager.sh
行中的所有内容
当 运行 食谱时,我收到以下输出:
Running handlers:
[2017-11-21T23:58:22+00:00] ERROR: Running exception handlers
[2017-11-21T23:58:22+00:00] ERROR: Running exception handlers
Running handlers complete
[2017-11-21T23:58:22+00:00] ERROR: Exception handlers complete
[2017-11-21T23:58:22+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 01 seconds
[2017-11-21T23:58:22+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
[2017-11-21T23:58:22+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
[2017-11-21T23:58:22+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2017-11-21T23:58:22+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2017-11-21T23:58:22+00:00] ERROR: bash[replace_text] (domain-test::sed2 line 1) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
STDOUT:
STDERR: sed: -e expression #1, char 34: unknown option to `s'
---- End output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
Ran "bash" "/tmp/chef-script20171121-11258-vwwwm6" returned 1
[2017-11-21T23:58:22+00:00] ERROR: bash[replace_text] (domain-test::sed2 line 1) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
STDOUT:
STDERR: sed: -e expression #1, char 34: unknown option to `s'
---- End output of "bash" "/tmp/chef-script20171121-11258-vwwwm6" ----
Ran "bash" "/tmp/chef-script20171121-11258-vwwwm6" returned 1
[2017-11-21T23:58:22+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
[2017-11-21T23:58:22+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>> Converge failed on instance <default-ubuntu-1404>. Please see .kitchen/logs/default-ubuntu-1404.log for more details
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration
您的反斜杠转义级别不够。请记住,它首先是 Ruby 字符串,然后是 bash 字符串,然后是 sed 参数。您也可以使用 line
或 poise-file
食谱来回避整个问题。