「mailx」を使用すると、「EOT」が電子メールの本文を終了して電子メールを送信しないのはなぜですか?

「mailx」を使用すると、「EOT」が電子メールの本文を終了して電子メールを送信しないのはなぜですか?

私が試したことは次のとおりです。

$ 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。ドキュメントリダイレクトでシェルスクリプトの区切り文字として使用されることがよくあります。ここでは、ほぼすべての単語をドキュメントリダイレクトの区切り文字として使用できます。ただし、すべて大文字で書かれた短い説明語を使用するのが一般的ですが、mailx標準入力ストリームにメッセージを提供してユーティリティに送信できます。次のようになります。

mailx -s 'test message' myself <<'END_MESSAGE'
This is the message.
Possibly on many lines.
END_MESSAGE

mailxこれにより、2行のテキストを含む非対話型Eメールがユーザーに送信されますmyself。メッセージテキストは先頭'END_MESSAGE'つまり、初期区切り記号()が引用されているため、シェルはその中の変数などを拡張しようとしません。

mailxしかし、質問の2つのコマンドで対話的にユーティリティにメッセージを入力したいようです。

ファイル()dotにこのオプションを設定すると、1行にドットのみを入力します。~/.mailrcset 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標準入力ストリームから対話型入力を読み取るほとんどのプログラムにのみ適用されません。

空白行に使用することは、現在の編集バッファにテキストを挿入、追加、または変更するため、またはコマンドの実行後にテキスト入力が完了したときにエディタでユーザー入力が終了したことを通知する.方法でもあります。この習慣が続いても驚かないでしょう。ediacmailxed

答え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のメールは、権限のないマイアカウントに転送されます。

Donalの意見はそれ自体は正確ですが、<< EOTこの場合、最後の行は間違っていました。リダイレクトがあってはなりませんEOT

関連情報