这是我尝试过的:
$ mailx -s "test email" cloud
Cc:
"again and agina"
.
EOT
或者,
$ mailx -s "test email" cloud
Cc:
"this is the first email"
<< EOT
但按下后Enter什么反应也没有。为什么?
答案1
thee-letter-string 并没有什么神奇之处EOT
。您可能时常在 shell 脚本中的此处文档重定向中看到它被用作分隔符。几乎任何单词都可以用作此处文档重定向的分隔符,尽管习惯上使用全部大写字母编写的简短描述性单词;例如,您可以mailx
通过在其标准输入流上向实用程序提供消息来发送消息,如下所示:
mailx -s 'test message' myself <<'END_MESSAGE'
This is the message.
Possibly on many lines.
END_MESSAGE
这将以mailx
非交互方式向用户发送包含两行文本的电子邮件myself
。消息正文是引'END_MESSAGE'
,即,由于引用了初始分隔符 ( ) ,shell 不会尝试在其中扩展变量等。
但是,从问题中的两个命令来看,您似乎希望以mailx
交互方式在实用程序中输入消息。
如果您dot
在~/.mailrc
文件 ( set dot
) 中设置了该选项,则在一行上单独键入一个点正如您在问题的第一部分中所做的那样将结束消息正文并导致发送电子邮件:
$ cat ~/.mailrc
set dot
$ mailx -s 'test message' myself
Cc:
This is the message.
Possibly on many lines.
.
键入单独的点并按下Enter会发送消息。
如果您没有dot
设置该选项,或者如果您nodot
在 中设置了该选项~/.mailrc
,则消息正文将使用Ctrl+D空行来结束。
按 将Ctrl+D当前行发送(commit、提交)到等待输入的程序,如果当前行是空的,这将表示输入结束。这不仅适用于mailx
从标准输入流读取交互式输入的大多数程序。
在发出、、 或命令以插入、追加或更改当前编辑缓冲区中的文本后完成输入文本时,在空行上使用.
也是您在编辑器中发出用户输入结束信号的方式。如果继承了这个习俗,我不会感到惊讶。ed
i
a
c
mailx
ed
答案2
作为我的非特权用户,我输入:
$ mailx -s "test email" root <<EOTx
> "this is the first email"
> EOTx
$
过了一会儿:
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Received: by XXXXXX.home (Postfix, from userid 1000)
id ADEF4C0CF994; Sat, 27 Aug 2022 20:32:56 +0100 (BST)
Date: Sat, 27 Aug 2022 20:32:56 +0100
To: [email protected]
Subject: test email
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <[email protected]>
From: XXXXXX <[email protected]>
X-Evolution-Source: mbox:/var/spool/mail/XXXXXX
"this is the first email"
root 的邮件被定向到我的非特权帐户。
多纳尔的评论就其本身而言是准确的,但是<< EOT
在这种情况下,您的最后一行是错误的。应该没有EOT
重定向。