Я хочу видеть количество непрочитанных сообщений в моей учетной записи сообщений электронной почты 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
Открытый 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"
Вот снимок экрана, если у меня есть новые письма:
И если я не получил новой почты:
Именно. Просто скопируйте и вставьте сценарий в конце Вашего ~/.bashrc
файл.
вот функция 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"