这是我尝试过的:
$ mailx -s "test email" cloud
Cc:
"again and agina"
.
EOT
Run Code Online (Sandbox Code Playgroud)
或者,
$ mailx -s "test email" cloud
Cc:
"this is the first email"
<< EOT
Run Code Online (Sandbox Code Playgroud)
但按下后Enter什么反应也没有。为什么?
thee-letter-string 并没有什么神奇之处EOT
。您可能时常在 shell 脚本中的此处文档重定向中看到它被用作分隔符。几乎任何单词都可以用作此处文档重定向的分隔符,尽管习惯上使用全部大写字母编写的简短描述性单词;例如,您可以mailx
通过在其标准输入流上向实用程序提供消息来发送消息,如下所示:
mailx -s 'test message' myself <<'END_MESSAGE'
This is the message.
Possibly on many lines.
END_MESSAGE
Run Code Online (Sandbox Code Playgroud)
这将以mailx
非交互方式向用户发送包含两行文本的电子邮件myself
。消息正文被引用,即,由于初始分隔符 ( 'END_MESSAGE'
) 的引用,shell 不会尝试扩展其中的变量等。
但是,从问题中的两个命令来看,您似乎希望以mailx
交互方式在实用程序中输入消息。
如果您已dot
在~/.mailrc
文件 ( ) 中设置了该选项,则像在问题的第一部分中那样在set dot
一行上单独键入一个点将结束消息正文并导致发送电子邮件:
$ cat ~/.mailrc
set dot
Run Code Online (Sandbox Code Playgroud)
$ mailx -s 'test message' myself
Cc:
This is the message.
Possibly on many lines.
.
Run Code Online (Sandbox Code Playgroud)
键入单独的点并按下Enter会发送消息。
如果您没有dot
设置该选项,或者如果您nodot
在 中设置了该选项~/.mailrc
,则消息正文将使用Ctrl+D空行来结束。
按 将Ctrl+D当前行发送(commit、提交)到等待输入的程序,如果当前行为空,则表示输入结束。这不仅适用于mailx
从标准输入流读取交互式输入的大多数程序。
在发出、、 或命令以插入、追加或更改当前编辑缓冲区中的文本后完成输入文本时,在空行上使用.
也是您在编辑器中发出用户输入结束信号的方式。如果继承了这个习俗,我不会感到惊讶。ed
i
a
c
mailx
ed