Добавление количества непрочитанных сообщений в командную строку терминала

Я хочу видеть количество непрочитанных сообщений в моей учетной записи почтовых сообщений 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 файл и добавьте этот скрипт в конце этого (не забудьте, что вы должны добавить этот скрипт в конце файла):

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

Что я сохранил вышеупомянутый результат в 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"

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

введите описание здесь

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

введите описание здесь

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

Вот функция 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"
Другие вопросы по тегам