有人能解释一下下面的命令是如何工作的吗?忽略sendmail命令开关-我知道它是如何工作的。我想知道命令的其余部分是如何工作的,即here-document (没有终止),cat从stdin读取,以及它是如何通过管道传输到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的邮件发送给收件人。
发布于 2018-08-17 12:55:50
所以这里的技巧是-
对于cat
来说是特殊的。它使cat
从标准输入中读取“一个文件”。here文档将文字行写入cat
的标准输入,因此效果是将文件$body
前面的文字行连接起来。
Bash似乎接受了反引号中缺少的here-document分隔符,尽管它确实发出了抱怨:
$ `cat <<HERE
echo foo
`
bash: warning: here-document at line 1 delimited by end-of-file (wanted `HERE')
foo
$
顺便说一句,这些反标记不是你想要的。试一试
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
HERE
}
https://stackoverflow.com/questions/51895760
复制相似问题