유사한 메일이 있는지 어떻게 확인 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이 나에게 준 아이디어를 받아들여 그것을 파이썬으로 바꾸었습니다:
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()