деструктурированное присваивание путем разделения на символы новой строки zsh

Вы не можете использовать init. Это неправильная программа для работы.

Вам нужно -понять, что initможно вызывать как обычную команду. Программы init, в которых это верно/было истинным, не являются программой init, которая у вас есть. Есть 4 initпрограммы, в которых ее можно вызвать как обычную команду, и вы не используете ни одну из них. Скорее вы используете BusyBox init, который, если обнаружит, что он был вызван в системе не как процесс #1, распечатывает это сообщение и завершает работу. Он не имеет никакой функциональности, кроме как процесс #1.

В BusyBox также нет telinit. Его initне имеет клиент-серверного интерфейса через FIFO.

Чтобы завершить работу, вы должны сделать что-то, что в конечном итоге приведет к отправке SIGPWR, SIGUSR1, SIGUSR2или SIGTERMпроцессу #1. Обратите внимание, что, как и в случае с другими наборами инструментов управления системой, «однопользовательский -пользовательский режим» (неправильное название с 1995 года )не является целью отключения. В такой режим не выключаются, и BusyBox initна самом деле не участвует в включении такого режима.

Скорее, в системах, использующих OpenRC поверх BusyBox init, этот режим полностью относится к механизмам OpenRC. openrc singleменяется на ошибочный -названный «одиночный» режим. (Используя собственныйinitOpenRC , который не подходит для вас, существует команда shutdown, которая с ним общается. Но это всего лишь весьма окольный путь бега openrc single, оказывается.)

Alpine Linux документирует устаревший OpenRC, примечание. Сам OpenRC больше не имеет каталога single. Это было удалено в 2019 году . Кроме того, команда rcбыла изменена на openrcв 2014 году .

Дополнительная литература

1
08.02.2021, 21:14
1 ответ

Чтение каждой строки отдельным вызовом read.

IFS= read -r first
IFS= read -r second

Например:

$ unset first second
$ printf 'one\ntwo\n' | { IFS= read -r first; IFS= read -r second; }
$ print $first
one
$ print $second
two

Описанное выше работает только потому, что zshправая часть конвейера не выполняется в отдельной подоболочке.

Или с заменой процесса:

$ unset first second
$ { IFS= read -r first; IFS= read -r second; } < <( printf 'one\ntwo\n' )
$ print $first
one
$ print $second
two

См. также Понимание «IFS= чтение -r строки»

3
18.03.2021, 22:31

Теги

Похожие вопросы