我想在命令提示符中查看我的 unix 邮件消息帐户中未读消息的数量。我该怎么做?
更新:这是我给自己发送两条消息时 mail 和 mailx 的输出:
"/var/mail/alex": 2 messages 2 new
N 1 Alex Thu Sep 25 16:53 13/420 subject for askubuntu 1
N 2 Alex Thu Sep 25 16:53 13/420 subject for askubuntu 2
答案1
打开gedit ~/.bashrc
文件并在其末尾添加此脚本(请不要忘记您必须在文件末尾或提示设置后准确添加此脚本):
UNREAD="$(mailx <<< q | head -n2 | tail -n1 | cut -f4 -d" ")"
if [[ -n "$UNREAD" ]]; then
PS1="[Hi, alex. you have $UNREAD new mail(s)] $PS1"
fi
我们编写了一个变量,使用该程序读取未读邮件的数量mailx
。
变量里面的命令解释:
mailx <<< q
我们将“q”传递给标准输入,mailx
以便它在提示显示后立即退出。
head -n2 | tail -n1
从前两行输出我们只想要第一行
cut -f4 -d" "
邮件数量报告如下:
/var/mail/alex: X messages Y unread
我们想要第四个以空格分隔的单词(Y)。
现在我们在 UNREAD 变量中有未读消息的数量,但是如果没有未读消息,则它可能为空,此时消息会更短,即:
/var/mail/alex: X messages
然后命令提示符将发生变化并"[Hi, alex. you have # new mail(s)]"
在提示符前显示:。如果您没有收到任何新邮件,则命令提示符将不会发生变化。
if [ -n "$UNREAD" ]; then
PS1="[Hi, alex. you have $UNREAD new mail(s)] $PS1"
fi
-n
标记[ -n "$UNREAD" ]
检查长度是否UNREAD
不为零。
PS1
定义了配置到.bashrc
主目录中的文件中命令提示符。这就是我们打开/编辑此文件的内容。然后我编辑它以在命令提示符前包含未读消息计数。请参阅:
PS1="[Hi, alex. you have $UNREAD new mail(s)] $PS1"
如果我有新邮件,请按照以下屏幕截图操作:
如果我没有收到任何新邮件:
就是这样。只需将脚本复制并粘贴到文件末尾即可~/.bashrc
。
答案2
这是一个执行此操作的 bash 函数: bash - gnome-terminal 中几乎从未检查过本地邮件,我该如何改变这种情况? - 询问 Ubuntu
MAIL_CHECK_TIME=0
mypromt()
{
local pwd='~'
local MAIL_SECONDS_DIFF=10
local MAIL_ELAPSED_SECONDS=$((SECONDS - MAIL_CHECK_TIME))
[ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/}
printf "\033]0;%s@%s:%s\033\\%s" "${USER}" "${HOSTNAME%%.*}" "${pwd}"
# if [ ! "$SSH_CONNECTION" ]; then
# if [ "$MAIL_CHECK_TIME" -eq "0" ] || [ "$MAIL_ELAPSED_SECONDS" -gt "$MAIL_SECONDS_DIFF" ]; then
if [[ "$MAIL_CHECK_TIME" -eq "0" || "$MAIL_ELAPSED_SECONDS" -gt "$MAIL_SECONDS_DIFF" ]]; then
local MAILX="$(mailx 2>/dev/null &)"
local COUNT=$(echo "$MAILX" | wc -l)
local COUNT=$((COUNT-3))
local MESSAGE_TEXT="message"
if [ "$COUNT" -gt "0" ]; then
if [ "$COUNT" -gt "1" ];then
MESSAGE_TEXT="messages"
fi
printf "You have $COUNT mail $MESSAGE_TEXT.\n \033]0;%s@%s:%s\033\\%s" "${USER}" "${HOSTNAME%%.*}" "${pwd}"
fi
MAIL_CHECK_TIME=$SECONDS
fi
# fi
# echo "seconds: $SECONDS"
# echo "check: $MAIL_CHECK_TIME"
# echo "elapsed: $MAIL_ELAPSED_SECONDS"
}
# uses mx linux /etc/profile.d prompt hook
PROMPT_COMMAND="mypromt"