Добавление непрочитанного сообщения рассчитывает к терминальной командной строке

Я хочу видеть количество непрочитанных сообщений в моей учетной записи сообщений электронной почты Unix в командной строке. Как я могу сделать это?

Обновление: Вот вывод от почты и 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 
3
задан 28 September 2014 в 19:59

2 ответа

Открытый gedit ~/.bashrc файл и добавляет, этот сценарий в конце того (не забывайте, что необходимо добавить этот сценарий в конце файла):

NewMail(){
    NEWMAIL=$(mailx &)
    UNREAD=$(echo $NEWMAIL |grep -o 'messages.*new' | cut -f2 -d" ")
}
NewMail # call NewMail function

if [ -n "$UNREAD" ]; then
    PS1="[Hi, alex. you have $UNREAD new mail(s)] $PS1"
fi

Мы записали функцию, имя которой NewMail.

Объяснение функции:

Результат первой строки (NEWMAIL=$(mailx)) согласно Вам информация в теле вопроса:

"/var/mail/alex": 2 messages 2 new [...]    # if you have a new unread mail

ИЛИ

No mail for alex                            # if you don't have a new mail

То, что я сохранил вышеупомянутый результат в a NEWMAIL переменная там.

Я передал результат в следующую команду во второй строке с этой командой echo $NEWMAIL.

Затем с этой командой grep -o 'messages.*new' Я получаю результат только между словом "сообщения" и "новым" словом, которое является: messages 2 new.

  • -o - Распечатайте только подобранные (непустые) части согласующего отрезка длинной линии с каждой такой частью на отдельной выходной строке.

Теперь у нас есть это messages 2 new результат. Затем я передаю этот результат для следующего управления cut -f2 -d" ", к получению просто количества сообщений:

  • -f флаг используется для полей и -f2 выберите только второе поле из"messages 2 new"
  • -d" " с одним пространством здесь используется для разделителя полей.

Затем после прибегающей второй строки, у нас есть количество новой непрочитанной почты, и это: 2 здесь.

В этом NewMail # call NewMail function строка, мы вызываем функцию NewMail.

С этим if условие, я проверяю, есть ли у Вас новая почта. Затем командная строка изменит и показывает: "[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"

Вот снимок экрана, если у меня есть новые письма:

enter image description here

И если я не получил новой почты:

enter image description here

Именно. Просто скопируйте и вставьте сценарий в конце Вашего ~/.bashrc файл.

2
ответ дан 1 December 2019 в 17:05

вот функция bash, которая делает это: bash - Локальная почта (почти) никогда не проверяется в gnome-терминале, как я могу это изменить? - Спросите 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"
0
ответ дан 28 September 2020 в 04:23

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

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