Это перехватит совпадающие символы:
regex=']0-9a-zA-Z,!^`@{}=().;/~_|[-'
echo "$str" | grep -oP '^['"$regex"']*'
Захват в переменной и удаление из начала исходной строки:
head="$(echo "$str" | grep -oP '^['"$regex"']*')"
tail="${str#"$head"}"
Наконец, получить первый сбойный символ:
failedChar="${tail:0:1}" # higher shells method.
failedChar="${tail"${tail#?}"}" # Alternative method.
Использование BASH_REMATCH
str="Testing that this is working."
regex=']0-9a-zA-Z,!^`@{}=().;/~_|[-'
[[ $str =~ ^[$regex]* ]]
head="${BASH_REMATCH[0]}"
tail="${str#"$head"}"
failedChar="${tail%"${tail#?}"}"
echo "fc |$failedChar| at position ${#head}"
Да, может быть, но он медленнее и менее эффективен, чем установка sysvinit по умолчанию .
Установка Devuan Ascii по умолчанию уже выполняет параллельную загрузку с insserv и startpar . Они работают путем разбора заголовков LSB в сценариях инициализации (, загляните внутрь /etc/init.d
), которые явно определяют зависимости. Когда вы запускаете sudo insserv
, insserv
обрабатывает эти сценарии инициализации в такие файлы, как /etc/init.d/.depend.boot
, /etc/init.d/.depend.start
и т. д. При загрузке startpar
считывает эти сценарии и запускает процессы параллельно в соответствии с этими правилами.
Например, вот моя загрузочная диаграмма с sysvinit (, загружающимся с консоли ):
Установка OpenRC выполняется так же, как и любого другого пакета:
$ apt update
$ apt install openrc
После установки он сообщит вам:
**********************************************************************
*** WARNING: if you are replacing sysv-rc by OpenRC, then you must ***
*** reboot immediately using the following command: ***
for file in /etc/rc0.d/K*; do s=`basename $(readlink "$file")` ; /etc/init.d/$s stop; done
**********************************************************************
Запустите это как суперпользователь.
В процессе установки apt
удалит insserv
и startpar
.
Однако, по моему опыту, OpenRC медленнее, чем расширенный sysvinit , из-за того, что OpenRC вычисляет зависимости во время загрузки, в отличие от insserv
, который делает это при установке пакета -. время.
Например, вот моя загрузочная диаграмма с OpenRC, которая на 1,57 секунды медленнее :
Если мы хотим пойти дальше, мы можем добавить строку rc_parallel="YES"
к /etc/rc.conf
. Однако это искажает выходные данные запуска для минимального выигрыша во времени запуска, что все еще медленнее, чем insserv
+ startpar
:.
Это связано с тем, что OpenRC по-прежнему использует сценарии инициализации LSB, написанные в оболочке, в отличие от настроек, более оптимизированных для него с использованием запуска openrc -. Даже с обновленной версией OpenRC с openrc -init, используемой вместо sysvinit, время загрузки все еще хуже.