私が試したことは次のとおりです。
$ 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行にドットのみを入力します。~/.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
答え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
。