【问题标题】:cat EOF issues with indentation [duplicate]cat EOF 缩进问题[重复]
【发布时间】:2025-12-05 13:10:01
【问题描述】:

注意:如果有人觉得这个问题之前已经回答过,请在下面粘贴您的答案,否则请不要干扰他人 试图帮助需要帮助的人。谢谢

我不确定为什么在内容缩进时尝试将内容分类到文件会如此麻烦

谁能指出如何关闭这个heredoc块

UserData:
  "Fn::Base64":
    !Sub |
      #!/bin/bash -xe
      NONCE=$(cat /tmp/nonce)
      cat <<-EOF > /tmp/docker-compose.yaml
      version: '3.5'
      services:
      onboarding:
          container_name: nginx
          image: nginx:${BuildId}
          restart: always
            ports:
            - 80:80
          environment:
            ENV: ${Env}
            AWS_REGION: ${Region}
            NONCE: $NONCE
      EOF
      source ~/.bashrc

但问题是关闭“EOF”时 cat 没有正确关闭。

文件内容/tmp/docker-compose.yaml

version: '3.5'
services:
onboarding:
    container_name: nginx
    image: nginx:${BuildId}
    restart: always
      ports:
      - 80:80
    environment:
      ENV: ${Env}
      AWS_REGION: ${Region}
      NONCE: $NONCE
EOF
source ~/.bashrc

但这是我期望看到的

version: '3.5'
services:
onboarding:
    container_name: nginx
    image: nginx:${BuildId}
    restart: always
      ports:
      - 80:80
    environment:
      ENV: ${Env}
      AWS_REGION: ${Region}
      NONCE: $NONCE

首先为什么这个heredoc即使有缩进也不是那么简单?我知道当内容中根本没有空格时它可以正常工作,但是人们不确定为什么当内容有空格时会如此麻烦

由于这个问题,我即将放弃 cat 的任何更好的选择

任何帮助将不胜感激 谢谢

【问题讨论】:

  • 不一样......那个问题没有缩进......这很容易......当内容有缩进时,如我的问题所示是一个问题
  • 不同的问题,相同的答案。使用制表符,而不是空格,并且不要缩进结束字符串。
  • 我已经使用了制表符..正如您所见,我添加了&gt;&gt;-EOF,因为他们提到使用制表符作为空格。我这样做了,但没有奏效...我花了太多钱在这件事上花费了几个小时,而在我没有合乎逻辑的理由为什么它不应该正常工作的事情上花费几个小时很烦人
  • 您可以粘贴您认为可行的答案,我可以试一试看看..我在问题中发布了上面的所有代码..如果您有信心您的答案可以发布,我会试试看..感谢您的帮助
  • 我只是给了你两个为什么它不起作用的原因。 “使用制表符,而不是空格,并且不要缩进你的结束字符串。”我不打算回答这个问题,因为我认为它应该被关闭。

标签: bash docker-compose amazon-cloudformation cat heredoc


【解决方案1】:

你写了&lt;&lt;-EOF,而我认为你应该写&lt;&lt;EOF

Bash 没有关闭您的heredoc,因为它希望-EOF 关闭它,因为您打开heredoc 的方式。要么将结尾从 EOF 更改为 -EOF,或者,这就是我的建议,将 &lt;&lt;-EOF 更改为 &lt;&lt;EOF

【讨论】:

  • 我已经尝试了&gt;&gt;EOF 和许多其他的东西......所以&gt;&gt;EOF 也没有工作
  • &lt;&lt;- 是有效的语法。
  • @uberrebu 我说错了(对不起),但是您是否尝试过删除EOF 之前的所有空格?如,将其一直向左移动。我认为值得一试。
  • 这是 cloudformation 模板的一部分,所以是的,我已经尝试将关闭的 EOF 一直放在该行的开头,但 nopes 不起作用..cloudformation 出现错误