这里的文件给出了“意外的文件结束”错误
我需要我的脚本从terminal发送电子邮件。 根据我在这里看到的以及在线其他许多地方,我把它格式化为这样:
/var/mail -s "$SUBJECT" "$EMAIL" << EOF Here's a line of my message! And here's another line! Last line of the message here! EOF
但是,当我运行这个我得到这个警告:
myfile.sh: line x: warning: here-document at line y delimited by end-of-file (wanted 'EOF') myfile.sh: line x+1: syntax error: unexpected end of file
…其中行x是程序中最后一行代码,行y是其中包含/ var / mail的行。 我尝试用其他东西(ENDOFMESSAGE,FINISH等)replaceEOF,但无济于事。 几乎我在网上find的所有东西都是通过这种方式完成的,而且我真的很新奇,所以我很难自己搞清楚。 任何人都可以提供帮助吗? 谢谢!
EOF
标记必须位于行的开头,不能将其与缩进代码块一起缩进。
如果你写<<-EOF
你可以缩进它,但它必须用Tab字符缩进,而不是空格。 所以它甚至可能不会以代码块结束。
还要确保在线上的EOF
标记之后没有空格。
开始或结束here-doc的行可能有一些不可打印的或空白的字符(例如回车符),这意味着第二个“EOF”与第一个不匹配,并且不会像here-doc一样结束这应该。 这是一个非常常见的错误,很难用文本编辑器来检测。 例如,您可以使不可打印的字符可见cat
:
cat -A myfile.sh
一旦你看到cat -A
的输出,解决scheme将是显而易见的:删除有问题的字符。
请尝试删除EOF
之前的空格: –
/var/mail -s "$SUBJECT" "$EMAIL" <<-EOF
使用<tab>
而不是<spaces>
作为ident并使用<< – EOF工作正常。
"-"
删除<tabs>
,而不是<spaces>
,但至less可以工作。
除了Barmar和Joni提到的其他答案之外,我注意到当使用<<-EOF
时,我有时必须在EOF之前和之后留下空行。