thn*_*tls 64 email bash heredoc
我需要我的脚本从终端发送电子邮件.基于我在这里看到的以及许多其他地方的在线,我将它格式化为:
/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
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这个时,我得到这个警告:
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
Run Code Online (Sandbox Code Playgroud)
...其中第x行是程序中最后写入的代码行,第y行是其中的行/var/mail
.我试着更换EOF
其他的事情(ENDOFMESSAGE
,FINISH
,等),但无济于事.我在网上找到的几乎所有内容都是这样做的,而且我真的很喜欢bash,所以我很难自己搞清楚.有人可以提供任何帮助吗?
Bar*_*mar 125
该EOF
令牌必须是在该行的开头,您不能使用的代码它会与块缩进它一起.
如果你写,<<-EOF
你可以缩进它,但它必须缩进Tab字符,而不是空格.因此,即使使用代码块,它仍然可能不会结束.
另外,还要确保你有没有空格后的EOF
上线令牌.
Jon*_*oni 12
启动或结束here-doc的行可能有一些不可打印或空白字符(例如,回车),这意味着第二个"EOF"与第一个不匹配,并且不会像here-doc那样结束这应该.这是一个非常常见的错误,仅使用文本编辑器很难检测到.您可以使不可打印的字符可见,例如cat
:
cat -A myfile.sh
Run Code Online (Sandbox Code Playgroud)
一旦你看到cat -A
解决方案的输出将是显而易见的:删除有问题的字符.
请尝试删除之前的空格EOF
: -
/var/mail -s "$SUBJECT" "$EMAIL" <<-EOF
Run Code Online (Sandbox Code Playgroud)
使用<< - EOF <tab>
而不是<spaces>
用于身份和使用EOF工作正常.
该"-"
删除<tabs>
,不是<spaces>
,但至少这个工程.