
ユーザーが未読メールを持っているかどうかを確認するためにユーザーIDをパラメータとして受け入れるシェルスクリプトを作成しています/var/spool/mail
。
ユーザーのメールステータスを確認するにはどうすればよいですか?/var/spool/mail
未読メールのみ?その場合は、ファイルサイズが0より大きいユーザーのみを確認するとします。
答え1
未読メッセージを見つける1つの方法は、メールスプールファイルのタイムスタンプを確認することです。ファイルがアクセス(読み取り)された後に記録された場合、つまりファイルがmtime
大きいatime
場合は未読メッセージがあります。
for f in /var/spool/mail/* ; do
[ $(stat -c '%Y -gt %X' "$f") ] && echo "$f has unread mail"
done
もちろん、メールボックスを開くと、誰かが個々のメッセージを表示しているかどうかにかかわらず、メールボックスの内容はすべて「読んだ」と見なされます。
多くの場合、読んでいるメッセージも~/mbox
スプールディレクトリから移動(に移動)されるため、ファイルサイズを確認するだけです。
答え2
オプションと次のようにmailx
(以前のmail
)コマンドを使用できます。-e
u
-eシステムメールボックスでのみメールを確認します。もしそうなら、終了ステータス0が返され、そうでなければゼロ以外の値が返されます。
-u user指定されたユーザー名のメールボックスを読み取ります。
root以外のユーザーが他のユーザーのEメールを確認できるようにするには、そのユーザーがrootとして実行できるようにするファイルにルールを作成する必要がありますsudo
。例:/etc/sudoers
mailx
fred localhost=/bin/mailx -e -u *
man sudoers
完全な形式を確認してください。
次に終了ステータスをテストします。
sudo mailx -e -u tom
フレッドによって処刑される