本地邮件几乎从未在 gnome-terminal 中检查过,我该如何改变这种情况?

本地邮件几乎从未在 gnome-terminal 中检查过,我该如何改变这种情况?

语境 :我知道“控制台”登录(使用“Ctrl-Alt-Fx”)提供了本地邮件检查(/var/mail/$USER),但 Ubuntu 用户不应该使用它来日常使用。相反,建议使用 gnome-terminal 进行命令行交互。

我的期望是: 当我启动 gnome-terminal 时,我希望 bash shell 检查本地邮件,如果有新邮件,则报告“您有新邮件”。但是它不起作用。

实际情况是: gnome-terminal 调用 bash 时未设置 $MAIL(和 $MAILCHECK)变量。这就是为什么用户永远不会收到有关新本地邮件的通知。

我尝试过: 我输入了 ~/.bashrc :

export MAIL=/var/mail/$USER
export MAILCHECK=60

而且……它实际上不起作用。只有当我在 gnome-terminal 运行时收到新邮件时,它才会起作用:在这种情况下,我将在下一个命令行提示符中看到“您有新邮件”。如果我在 gnome-terminal 未运行时收到新邮件,然后启动 gnome-terminal:根本没有通知。

有什么想法吗?(据记录,我使用的是 Ubuntu 19.10)

答案1

简而言之,虚拟终端无法控制操作系统登录操作。就填充 bash(大多数 shell)检查邮件的“正确内容”而言,实际执行此工作的程序是 login(1) - 它位于 shell 配置之外。

关于 login(1) 如何在所有这些中发挥作用,这里有一个优雅的答案:bash - 为什么在图形环境中未设置 MAIL? - Unix & Linux Stack Exchange

话虽如此,我使用以下函数根据最大间隔显示系统邮件通知(如果系统邮件存在)。您必须弄清楚提示钩子,但这应该会为您指明正确的方向。希望这能有所帮助:

应与终端上的“登录 shell”模式一起使用......

# add to your ~/.profile or equivelant
MAIL_CHECK_TIME=0
mypromt()
{
    local pwd='~'
    local MAIL_SECONDS_DIFF=$MAILCHECK

    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
            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"

相关内容