Mailx

為什麼使用“mailx”時“EOT”不結束郵件正文並發送郵件?

  • August 28, 2022

這是我嘗試過的:

$ mailx -s "test email" cloud
Cc: 
"again and agina"
.
EOT

或者,

$ mailx -s "test email" cloud
Cc: 
"this is the first email"
<< EOT

但按下後Enter沒有任何反應。為什麼?

thee-letter-string 沒有什麼神奇之處EOT。您可能已經看到它不時在 shell 腳本中的 here-document 重定向中用作分隔符。幾乎任何單詞都可以用作此處文件重定向的分隔符,儘管習慣上使用全部大寫字母的簡短描述性單詞;因此,例如,您可以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將目前行發送(送出、送出)到等待輸入的程序,如果目前行為,則表示輸入結束。這不僅適用mailx於從標準輸入流中讀取互動式輸入的大多數程序,而且適用於大多數程序。

.在空行上使用也是在發出、或命令以插入、附加或更改目前編輯緩衝區中的ed文本後完成輸入文本時,在編輯器中發出使用者輸入結束信號的方式。如果繼承了這個習俗,我不會感到驚訝。i``a``c``mailx``ed

引用自:https://unix.stackexchange.com/questions/715130