我有Heredoc:
user_data = <<-USERDATA
#!/bin/bash
echo "server {" >> /etc/nginx/sites-available/site
echo " listen 80;" >> /etc/nginx/sites-available/site
echo " location / {" >> /etc/nginx/sites-available/site
echo " proxy_set_header X-Forwarded-For $remote_addr;" >> /etc/nginx/sites-available/site
echo " proxy_set_header Host $http_host;" >> /etc/nginx/sites-available/site
echo " }" >> /etc/nginx/sites-available/site
echo "}" >> /etc/nginx/sites-available/site
-USERDATA
现在,$remote_addr;
和 $http_host;
不应该插值,而是在我获得输出时是空的。
我尝试使用 $$remote_addr
; 但这也会返回一个空结果,而不是字符串$remote_addr;
任何人都可以看到我在转义 $ 字符方面做错了什么吗?
解决方法
通过使用地形插值,我能够渲染字符串,${"$remote_addr;"}
返回 $remote_addr;
但也许存在更好的解决方案?
您可以使用分隔符将文本块插入到文件中,使其可能更容易阅读,例如:
#!/bin/bash
cat <<EOM >/etc/nginx/sites-available/site
server {
listen 80;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
}
EOM
但是您仍然需要按照注释 (\$( 中的建议转义 $ 符号。