如何将带有双斜杠的属性值传递给模板
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"
)
由于反斜杠是转义字符,第一个反斜杠转义第二个反斜杠,因此您需要重复两次才能在输出中获得两个反斜杠
我正在尝试开发一本同时支持 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"
)
由于反斜杠是转义字符,第一个反斜杠转义第二个反斜杠,因此您需要重复两次才能在输出中获得两个反斜杠