[英]how to use custom attribute in chef, so one can pass some value in default recipe?
[英]How to pass attribute value with double slash to a template
我正在嘗試開發將同時支持Windows和Linux平台的食譜。 使用模板時出現問題。 因此,基本上,我正在嘗試放置一個shell腳本,該腳本將具有帶有路徑的export
命令。 但是我無法在Windows的Shell腳本上獲得確切的值。
屬性:
root_path = value_for_platform(
'windows' => { 'default' => "D:\\" },
'default' => '/opt'
)
xyz_path = value_for_platform(
'windows' => { 'default' => "#{root_path}xyz_app\\tool\\bin\\xyz.bat" },
'default' => "#{root_path}/xyz_app//tool//bin//xyz"
)
食譜:
template File.join(root_path, '/tmp/xyz_path.sh') do
source 'xyz_path.sh.erb'
mode '0755'
variables({
:xyz_path => xyz_path
})
end
模板
#!/bin/bash
export xyz_path = <%= @xyz_path %>
在Windows上的期望
#!/bin/bash
export xyz_path = D:\\xyz_app\\tool\\bin\\xyz.bat
Windows上的現實
#!/bin/bash
export xyz_path = D:\xyz_app\tool\bin\xyz.bat
使用4個反斜杠即可獲得所需的內容。
root_path = value_for_platform(
'windows' => { 'default' => "D:\\\\" },
'default' => '/opt'
)
xyz_path = value_for_platform(
'windows' => { 'default' => "#{root_path}xyz_app\\\\tool\\\\bin\\\\xyz.bat" },
'default' => "#{root_path}/xyz_app//tool//bin//xyz"
)
由於反斜杠是轉義字符,因此第一個反斜杠將轉義第二個斜杠,因此您需要重復兩次以在輸出中獲得兩個反斜杠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.