【发布时间】:2019-01-24 12:26:24
【问题描述】:
有人可以解释一下下面的命令是如何工作的吗?忽略 sendmail 命令开关,我知道它是如何工作的。我想知道命令的其余部分是如何工作的,即 here-document(没有终止)、从标准输入读取的 cat 以及它如何通过管道传输到 sendmail。
SEND_MAIL()
{
`cat - $body <<HERE | /usr/lib/sendmail -oi -t
From: $SENDER
To: $RECEIVER
Subject: $SUBJECT
Content-Type: text/html; charset=us-ascii
MIME-Version: 1.0`
}
更新:
为了回答一些困惑,上面的代码是由其他人编写的,令人惊讶的是它确实有效。代码的作者简单地执行了这个函数,它成功地向收件人发送了邮件,内容为$body。
【问题讨论】:
-
它根本不应该工作,因为您缺少 here-doc 的结束分隔符。
-
为什么整个命令块都是反引号?没有这些就行不通。添加 HERE 终结器,看看你是否可以不使用这些终结器,因为它们目前是让它尝试的黑客。
-
@chepner - 它确实有效,可能是因为 Jon 说的反引号。
-
如果
sendmail产生任何输出,它将不起作用。
标签: bash shell sh sendmail heredoc