POP3 не идеально подходит для такого использования, IMAP был бы намного лучше. Однако,если ваш POP3-сервер поддерживает необходимые команды, Mutt можно настроить так, чтобы почта оставалась на сервере и загружались только новые сообщения:
unset pop_delete
скажет Матту хранить сообщения на сервере, а
set pop_last
сообщит Mutt, что нужно использовать команду LAST
POP3 для получения только непрочитанных сообщений с сервера. (См. RFC 1460 для получения подробной информации о команде LAST
, которая была признана сложной для правильной реализации и была удалена из последующих RFC POP3.)
[mng]
не соответствует mng
, он соответствует либо m
, либо n
, либо g
. Подходящим регулярным выражением является (^|^mng)kafka[[:digit:]]+$
. Это соответствует
(^|^mng)
нулевая строка или mng
в начале строки, kafka
, [[:digit:]]+$
одна или несколько цифр, привязанных к концу строки. Обратите внимание, что ваше предыдущее регулярное выражение также вызывало ложное срабатывание для kafka7u
так как он не был закреплен.
Тест:
arr=(kafka01 kafka7u mngkafka01 gkafka7x)
for i in "${arr[@]}"; do
if [[ $i =~ (^|^mng)kafka[[:digit:]]+$ ]]; then
echo "$i"
fi
done
Выход:
kafka01
mngkafka01
Дополнительная информация:Условные конструкции(см. [[...]]
раздел ).
Исправлена версия вашей первоначальной попытки:
if [[ $(hostname -s) =~ (^|^mng)kafka[[:digit:]]+$ ]]
then
/tmp/run.sh
fi
Квазимодо уже дал вам ответ, почему ваше регулярное выражение не работает. Я предложу другой подход. Вместо регулярных выражений используйте case
и подстановочные знаки :
case $(hostname -s) in
kafka[0-9]*|mngkafka[0-9]*)
/tmp/run.sh
esac
Это гораздо проще распространить на большее количество шаблонов, и лично мне легче читать.