You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:45:24