似たようなメールがあるかどうかを確認したりbash
(python
優先)できますか?unread
/var/spool/mail/$USER
pam_mail
私の好きなようにカスタマイズするのに使いたいです。モードスクリプト、motd.dynamic
答え1
メールボックスファイルに未読メッセージがあるかどうかを確認する従来の方法は、アクセス時間が変更時間より早いかどうかを確認することです。
次のコマンドを使用して、これらの時間を簡単に見つけることができますstat
。これらの値は、カスタム出力形式を指定してシェルにインポートできます。
eval $(stat -c 'atime=%X; mtime=%Y' /var/spool/mail/$USER)
その後、次の値を比較できます。
if [ $atime -le $mtime ]; then echo 'You have new mail'; fi
より強力にするには、まずメールファイルが存在することを確認してください。
答え2
私は@wurtelが私に与えたアイデアを受け入れ、それをPythonに変えました:
def mail():
# See https://tools.ietf.org/html/rfc4155
import os
import os.path
import time
mailbox = '/var/spool/mail/' + curr_user()
def d( content, color = COLOR_NORMAL ):
return colored( justify( content, 1 ) + '\n', color )
def none():
return d( 'No new mail' ) if MAIL_NONE_DISPLAY else ''
if not os.path.isfile( mailbox ): return none()
stat = os.stat( mailbox )
if stat.st_mtime > stat.st_atime:
# mailbox has been modified after accessed.
if MAIL_NEW_COUNT:
# check how many new mails.
count = 0
newlines = 2
for l in open( mailbox ):
if l.isspace(): newlines += 1
else:
# New == We have a From header the date > atime.
if newlines == 2 and l.startswith( 'From ' ) and time.mktime( time.strptime( l.split( None, 2 )[2].strip() ) ):
count += 1
newlines = 0
# open() will change access time, correct it.
os.utime( mailbox, (time.time(), stat.st_mtime) if MAIL_CONSIDER_READ else (stat.st_atime, stat.st_mtime) )
return d( 'You have {0} new mails'.format( count ), COLOR_WARN ) if count else none()
else: return d( 'You have new mail', COLOR_WARN )
else: return none()