Shell中EOF操作符未退出,Vagrantfile编辑Hadoop文件异常求助
问题原因与修复方案
你的问题出在bash Here Document的结束标记格式错误:默认情况下,<<EOF的结束标记EOF必须完全顶格(不能有任何前导空格或制表符),否则bash会把它当成普通文本写入文件,不会触发结束。
修复方法一:结束标记顶格(推荐)
将结束的EOF完全顶格,同时调整XML内容的缩进,确保shell脚本语法正确:
if node.vm.hostname == "node1" node.vm.provision "shell", inline: <<-SHELL cat >/hadoop/conf/core-site.xml <<EOF <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:8000</value> </property> </configuration> EOF SHELL end
修复方法二:允许结束标记带制表符缩进
如果想保留XML内容的缩进,可以使用<<-EOF(注意多了一个减号),这样结束标记前的制表符(必须是制表符,不能是空格)会被忽略:
if node.vm.hostname == "node1" node.vm.provision "shell", inline: <<-SHELL cat >/hadoop/conf/core-site.xml <<-EOF <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:8000</value> </property> </configuration> EOF SHELL end
注意事项
- 方法二中的缩进必须是制表符,用空格的话依然会导致结束标记失效。
- 两种方法任选其一即可,推荐方法一,避免因制表符/空格混淆导致的问题。
内容的提问来源于stack exchange,提问作者Dawit
相关产品推荐
相关产品推荐

