我需要从Ruby构建一个用户数据脚本,所以我需要保留所有转义字符。当我这样做时:
def user_data
"#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml"
end
该字符串删除Name标记中的\。如果我把两个\,它保持两个。有关如何保持字符串与我编写它的方式相同的任何建议吗?
谢谢!
答案 0 :(得分:1)
您可以使用%q
delimiter而不是"
:
def user_data
%q[#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml]
end
答案 1 :(得分:0)
我使用heredoc:
def user_data
<<~'SH'
#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml
SH
end
puts user_data
~
删除缩进,SH
周围的单引号禁用插值和转义。
输出:
#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml