Вы не можете использовать 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
меняется на ошибочный -названный «одиночный» режим. (Используя собственныйinit
OpenRC , который не подходит для вас, существует команда shutdown
, которая с ним общается. Но это всего лишь весьма окольный путь бега openrc single
, оказывается.)
Alpine Linux документирует устаревший OpenRC, примечание. Сам OpenRC больше не имеет каталога single
. Это было удалено в 2019 году . Кроме того, команда rc
была изменена на openrc
в 2014 году .
Чтение каждой строки отдельным вызовом 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 строки»