"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이렇게 하면 두 줄의 텍스트가 포함된 비대화형 이메일이 사용자에게 전송 됩니다 myself. 메시지 텍스트는선두'END_MESSAGE'즉, 초기 구분 기호( )가 인용되어 있으므로 쉘은 그 안에 있는 변수 등을 확장하려고 시도하지 않습니다.

mailx그러나 질문의 ​​두 명령에서 대화식으로 유틸리티에 메시지를 입력 하려는 것처럼 보입니다 .

파일( ) dot에 이 옵션을 설정 하면 한 줄에 점만 입력합니다.~/.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.

관련 정보