猫をメールにパイプするときに奇妙な問題が発生します。
スクリプトからコンパイルされた単純なテキスト ファイルがあります。これは、スクリプトでコピーされたフォルダーに関するレポートです。このレポートをシステム管理者に電子メールで送信したいと考えています。
スクリプトはレポートを問題なく生成します。
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 などを調べてください。