/usr/bin/mail が新しい行を解釈しない

/usr/bin/mail が新しい行を解釈しない

猫をメールにパイプするときに奇妙な問題が発生します。

スクリプトからコンパイルされた単純なテキスト ファイルがあります。これは、スクリプトでコピーされたフォルダーに関するレポートです。このレポートをシステム管理者に電子メールで送信したいと考えています。

スクリプトはレポートを問題なく生成します。

cat /tmp/report.txt

期待どおりにすべての改行が含まれた、適切にフォーマットされた出力が得られます。

Copy report. Started on Mon Sep 28 13:37:57 BST 2015

Run in progress?: Yes

3 directories were copied.

Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)
Copy completed on 2015.09.28 at 13:37:57
Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps


Copy started on 2015.09.28 at 13:37:59
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14)
Copy completed on 2015.09.28 at 13:37:59
Copy info:
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k
0inputs+355896outputs (0major+152minor)pagefaults 0swaps


Copy started on 2015.09.28 at 13:38:01
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18)
Copy completed on 2015.09.28 at 13:38:01
Copy info:
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k
0inputs+355896outputs (0major+151minor)pagefaults 0swaps

しかし、何らかの理由でこれをメールに送ると

cat /tmp/report.txt | mail -s "Copy Report" [email protected]

または

mail -s "Copy Report" [email protected] < /tmp/report.txt

これは私が受け取ったメールです。

Copy report. Started on Mon Sep 28 13:37:57 BST 2015

Run in progress?: Yes

3 directories were copied.

Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Copy completed on 2015.09.28 at 13:37:57 Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps


Copy started on 2015.09.28 at 13:37:59
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14) Copy completed on 2015.09.28 at 13:37:59 Copy info:
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k
0inputs+355896outputs (0major+152minor)pagefaults 0swaps


Copy started on 2015.09.28 at 13:38:01
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18) Copy completed on 2015.09.28 at 13:38:01 Copy info:
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k
0inputs+355896outputs (0major+151minor)pagefaults 0swaps

何が起こっているのでしょうか? 改行があるものとないものがあります! vi と nano の両方でファイルを編集して、改行が実際に存在することを確認しました。また、改行を削除して再度作成しましたが、電子メールの出力は同じままです。

/usr/bin/mail を使用する

さらに詳しい情報:

私は次の内容をテキスト ファイルに手動で入力し、同じパイプをメールに実行しました。各行の先頭に「Copy」という単語を入れました。

Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)
Copy completed on 2015.09.28 at 13:37:57
Copy info:
Copy 0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
Copy 0inputs+355896outputs (0major+150minor)pagefaults 0swaps

メールで受け取った内容は次のとおりです。

Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Copy completed on 2015.09.28 at 13:37:57 Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps

次に、「コピー」という単語をすべて削除しました。これがメールで受け取った内容です。

Started on 2015.09.29 at 09:46:49
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Completed on 2015.09.29 at 09:46:49
Info:
0.00user 0.46system 0:01.98elapsed 23%CPU (0avgtext+0avgdata 2552maxresident)k
0inputs+355896outputs (0major+149minor)pagefaults 0swaps

「Copy」という単語に関係があるかもしれないと思いましたが、改行のない行がまだ 1 つあります。

これは、cat -vet /tmp/report.txt

Copy report. Started on Mon Sep 28 13:37:57 BST 2015$
$
Run in progress?: Yes$
$
$
$
3 directories were copied.$
$
$
Copy started on 2015.09.28 at 13:37:57$
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)$
Copy completed on 2015.09.28 at 13:37:57$
Copy info:$
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k$
0inputs+355896outputs (0major+150minor)pagefaults 0swaps$
$
$
Copy started on 2015.09.28 at 13:37:59$
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14)$
Copy completed on 2015.09.28 at 13:37:59$
Copy info:$
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k$
0inputs+355896outputs (0major+152minor)pagefaults 0swaps$
$
$
Copy started on 2015.09.28 at 13:38:01$
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18)$
Copy completed on 2015.09.28 at 13:38:01$
Copy info:$
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k$
0inputs+355896outputs (0major+151minor)pagefaults 0swaps$

答え1

おそらく「format=flowed」に悩まされているのでしょう特徴かなり前に導入されたので、RFC2646 の翻訳

おそらく、いくつかの行の末尾にスペース文字があることに気づくでしょう。一部のメール リーダーでは、これは「この行を次の行と連結し、画面の幅に収まるように行のテキストの折り返しをやり直す」という意味として解釈されます。

通常、これはメールにContent-Typeヘッダー オプションがある場合にのみ実行する必要がありますformat=flowedが、最近では非 Unix ユーザーのためにこれがデフォルトになっています。

cat -vetデータに を使用して、末尾のスペースがあるかどうかを確認します。 を使用してsed 's/ \+$//'、スペースを削除します。


データ内には末尾のスペースや制御文字、改行は見られませんでしたので、メーラーがデータを改ざんしたという言い訳はまったくありません。

最後にもう一度試してください。Andrzej A. Filip が提案したように、mailに直接進むのではなく、 にsendmail進みます。これにより、明示的なコンテンツ タイプ ヘッダーを追加できるようになります。例:

(echo 'Subject: Copy Report'
 echo 'Content-Type: text/plain; charset=us-ascii; format=fixed'
 echo
 cat /tmp/report.txt
) |  sendmail [email protected]

最後にecho、データの前にヘッダーを終了します。sendmail が PATH に存在しない可能性があります。/sbin や /usr/sbin などを調べてください。

関連情報