将未读消息计数添加到终端命令提示符

将未读消息计数添加到终端命令提示符

我想在命令提示符中查看我的 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"

相关内容