my Debian systemd stopped starting any service
В предоставленном журнале нет указаний на то, что это действительно так.
the system suddenly gets stucked receiving watchdog events ad infinitum.
Эти события являются обычными уведомлениями и далеки от зависания системы, они указывают на то, что система не зависла. Это одна часть системы, сообщающая другой части системы, что она не зависла, каждые 20 секунд.
How could I find out what the problem is?
Поставьте правильный диагноз.
Если проблема связана со службой SSH, просмотрите журналы службы SSH . Не делайте поспешных выводов о том, что ваша система не запускает никаких служб без журналов сбоев при запуске служб. Действительно, не делайте поспешных выводов о том, что проблема связана с systemd, не определив, почему вы не можете -войти в систему. Тайм-аут, отклоненное соединение и отклоненная проверка подлинности могут иметь очень разные основные причины, некоторые из которых могут вообще не быть чем-либо на вашем компьютере.
Действуйте систематически и методично, держа в руках журналы на каждом этапе.
the mail is never sent.
Вы раздули одну проблему на две. Теперь у вас есть дополнительная задача определить, как работает ваша почтовая система, чтобы , а затем определить, как работает что-то еще. Это не лучший подход. Логи — ваш друг.
Я нигде не вижу на справочной странице ksh, что можно сопоставить строку с регулярным выражением и использовать скобки для извлечения подстрок (, как в bash с
[[ $str =~ ^([[:alnum:]]+([ -]+[[:alnum:]]+)+) ]] && echo "${BASH_REMATCH[1]}"
Однако вы можете использовать расширенные регулярные выражения в шаблонах глобусов с помощью ~(E:regex)
, так что вы можете сделать это:
for n in "${names[@]}"; do
# remove the pattern from the start of the string
tmp=${n##~(E:\w+([ -]+\w+)*)}
# and then remove what remained from the end of the string
echo "[${n%$tmp}]"
done
[Jill Shortz]
[Bill Torts]
[Will Courtz]
[Phil-Lip Warts]
... а для максимальной записи -только нечитаемость
for n in "${names[@]}"; do
echo "${n%${n##~(E:\w+([ -]+\w+)*)}}"
done
Я вообще не вижу смысла в регулярных выражениях для выполнения этой задачи, если вы просто хотите удалить все после первой запятой.
names=( "${names[@]%%,*}" )
printf '"%s"\n' "${names[@]}"
Это удаляет первую запятую и все после нее из каждого элемента массива отдельно (буквально «самый длинный суффикс, соответствующий шаблону подстановки ,*
» ). Результирующий список измененных имен затем повторно -присваивается массиву names
(и печатается с помощьюprintf
).
Код, учитывая вашу первоначальную инициализацию массива в списке в вопросе, будет генерировать
"Jill Shortz"
"Bill Torts"
"Will Courtz"
"Phil-Lip Warts"
(двойные кавычки добавляются строкой формата printf
).
Код будет работать с ksh93
, bash
, zsh
и yash
.