Добавление количества непрочитанных сообщений в командную строку терминала
Я хочу видеть количество непрочитанных сообщений в моей учетной записи почтовых сообщений 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"