Elastic Beanstalk部署报错:ebextensions配置文件格式问题求助
解决Elastic Beanstalk ebextensions命令中引号转义的问题
嘿,我一眼就看出你这问题出在多层引号嵌套的转义上——这种嵌套在bash -c的上下文里很容易把人绕晕,尤其是你还在HTML标签里用了一堆引号,转义链一长就容易出错。咱们来给你几个靠谱的解决方案,从易维护到快速调整都有:
方案1:用Here-Doc彻底避免引号转义(最推荐)
Here-Doc是bash里的神器,能让你直接写入多行内容,完全不用管引号转义的事。把你的命令改成这样:
commands: 01_generate_custom_error_page: command: | sudo bash -c 'cat > custom_50x.html << "EOF" <img src="http://www.foo.com/img/custom_500.png" alt="500" style="left:50%;top:50%;position:fixed;margin-top:-235px;margin-left:-200px"/> EOF'
这里的<< "EOF"表示把EOF之间的内容原封不动写入文件,里面的引号、特殊字符都不会被bash解析,完美解决转义问题。
方案2:调整引号嵌套规则,简化转义
如果不想用Here-Doc,也可以调整引号的使用方式:在bash的单引号环境里,要输出单引号的话,用两个连续的单引号代替转义符。修改后的命令如下:
commands: 01_generate_custom_error_page: command: sudo bash -c 'echo "<img src=''http://www.foo.com/img/custom_500.png'' alt=''500'' style=''left:50%;top:50%;position:fixed;margin-top:-235px;margin-left:-200px''/>" > custom_50x.html'
这种方式比原来的多层转义清晰很多,至少不会出现\"和\'混在一起的混乱。
方案3:把HTML内容单独存放(最易维护)
如果你的错误页面内容以后可能修改,最好把HTML单独放在一个文件里,然后用ebextensions的files指令直接部署,彻底告别命令行引号问题:
- 在你的项目根目录下创建
.ebextensions/files/custom_50x.html,内容就是你的img标签:
<img src="http://www.foo.com/img/custom_500.png" alt="500" style="left:50%;top:50%;position:fixed;margin-top:-235px;margin-left:-200px"/>
- 在你的ebextensions配置文件里添加
files段:
files: "/path/to/your/custom_50x.html": # 替换成你实际需要存放文件的路径 mode: "0644" owner: root group: root source: .ebextensions/files/custom_50x.html
这种方式不仅避免了引号问题,还让配置和页面内容分离,以后修改页面直接改HTML文件就行,不用碰ebextensions的命令,非常省心。
内容的提问来源于stack exchange,提问作者Sam Pearson
相关产品推荐
相关产品推荐

