Локальная почта (почти) никогда не проверяется в gnome-terminal, как я могу это изменить?

Контекст: Я знаю, что "консольный" логин (с "Ctrl-Alt-Fx") обеспечивает проверку локальной почты (/ var / mail / $ USER), но ожидается, что пользователь Ubuntu не будет использовать его для повседневного использования . Вместо этого рекомендуется использовать gnome-terminal для взаимодействия с командной строкой.

Чего я ожидал: Когда я запускаю gnome-terminal, я ожидаю, что оболочка bash проверит локальную почту и сообщит, соответственно, «У вас новая почта», если есть новая почта. Но это не работает.

Что происходит вместо: gnome-terminal вызывает bash с неустановленными переменными $ MAIL (и $ MAILCHECK). Вот почему пользователя никогда не информируют о новой локальной почте.

Что я пробовал: Я вставил ~ / .bashrc:

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

И ... на самом деле это не работает. Это работает только в том случае, если я получаю новое письмо во время работы gnome-terminal: в этом случае у меня будет сообщение «У вас новая почта» в следующей командной строке. Если я получаю новую почту, когда gnome-terminal не запущен, а затем запускаю gnome-terminal: никаких уведомлений.

Есть идеи? (для записи я использую Ubuntu 19.10)

1
задан 11 April 2020 в 23:12

1 ответ

Короткий ответ заключается в том, что виртуальные терминалы не контролируют операции входа в ОС. С точки зрения заполнения «правильных вещей» для bash (большинства оболочек) для проверки почты, программа, которая на самом деле выполняет эту работу, - это login (1), которая находится вне конфигурации оболочки.

Есть элегантный ответ о том, какую роль во всем этом играет login(1): bash - Почему MAIL не установлен в графических средах? - Unix & Linux Stack Exchange

С учетом сказанного, я использую следующую функцию для отображения уведомлений о системной почте, если она существует, на основе максимального интервала. Вам нужно будет найти подсказку, но это должно указать вам правильное направление. Надеюсь, это поможет:

Должен использоваться с режимом 'login 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"
0
ответ дан 28 September 2020 в 03:25

Другие вопросы по тегам:

Похожие вопросы: