- PR -

シェルにmailのサブコマンドを書く方法

1
投稿者投稿内容
dchar
常連さん
会議室デビュー日: 2004/05/10
投稿数: 41
投稿日時: 2004-08-03 13:24
シェルスクリプトでメールを飛ばす場合について質問です。
ディスクの容量監視をするためにdf -kの結果をメールで飛ばしたいと思っています。
ヒアドキュメントを使う方法を調べ以下のようなスクリプトを書いたのですが件名のところがうまく入らず
本文に記載されてしまいます。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/bin/sh

mail hoge@hoge<<END
Subject: `hostname`_`date`

`df -k`

END

~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^~~~~~~

ftpやmailなどサブコマンドがあるコマンドを使用する場合は
どのように書くべきでしょうか?

サブコマンド シェル mailなどで検索し
いろいろ調べたのですが情報が見つからなくて困っています。
ご教授ください。
水都
大ベテラン
会議室デビュー日: 2004/07/22
投稿数: 111
投稿日時: 2004-08-03 13:51
こんにちは、dcharさん

私が以前にsquidのログを飛ばすのに作った時はSubjectに日のみを入れたのですが、以下でやりました

DAY=`date +%d`
MAIL=hoge@example.ne.jp
SUB=squid_$DAY

mail -s $SUB $MAIL

ただ、dateだけだとブランクが入るので、この方法だと"$SUB"としてやる必要があるかと思います

#実は他にもgrepとかかましてあるけど、そこは関係ないので省略
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 2004-08-03 15:06
RedHat Linux7.3 の /bin/mail だとこんな感じでしょうか。
------------- ここから ------------------------------
#!/bin/sh

SUBJECT="`hostname`_`date`"

/bin/mail -s "$SUBJECT" hoge@hoge<<END

`df -k`

END
--------------------- ここまで ------------------------

Solaris8 の /usr/bin/mail だと dchar さんのシェルスクリプトで
Subject: ホスト名_Tue Aug 3 13:52:30 JST 2004
となりました。
dchar
常連さん
会議室デビュー日: 2004/05/10
投稿数: 41
投稿日時: 2004-08-03 20:18
レスありがとうございます。

私もsolaris8で試したのですがNeXTさんのようにはならなかったのですよ。
なんでだろう??
で自己解決なのですがsendmail -tで希望していたような動作を実現できました。

#!/bin/sh

adad=差出メールアドレス

cat <<END | /usr/lib/sendmail -t
Return-Path: <${adad}>
From: `hostname`_admin
To:送信先メールアドレス
Subject: [DailyCheck]`hostname`_20`date +%y%m%d`

`df -k`

END

とりあえず解決できました。ありがとうございます。
PS.明日はFTPのシェルをかかないとなりません。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-08-03 20:43
解決したようですが、

> 私もsolaris8で試したのですがNeXTさんのようにはならなかったのですよ。
> なんでだろう??

ロケールがja_JP.PCKだったとか。

> ヒアドキュメントを使う方法を調べ以下のようなスクリプトを書いたのですが件名のとこ
> ろがうまく入らず本文に記載されてしまいます。

こういうときは、送付されたメールのソースを見るのが良いです。
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 2004-08-04 00:23
> 私もsolaris8で試したのですがNeXTさんのようにはならなかったのですよ。
> なんでだろう??

/usr/bin/mail -> OK

/usr/ucb/mail -> NG
の違いではないでしょうか。

mail hoge@hoge<<END の mail コマンドを絶対パスで記述してみるとよいか
もしれません。もしくは which mail
でどちらが先に表示されるか,でしょうか。

ちなみに /usr/bin/locale で確認してみましたがLANG 等すべて C でした。
1

スキルアップ/キャリアアップ(JOB@IT)