pam_mail のカスタム motd スクリプトのように、/var/spool/mail/$USER の「新しさ」/「読んだ状態」を確認してください。

pam_mail のカスタム motd スクリプトのように、/var/spool/mail/$USER の「新しさ」/「読んだ状態」を確認してください。

似たようなメールがあるかどうかを確認したりbashpython優先)できますか?unread/var/spool/mail/$USERpam_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()

関連情報