Я хочу сделать следующее: я хочу заменить программу systemd в моей установке CentOS 7 на скрипт , который в конечном итоге запустится оболочка, в которой пользователь может вводить команды от имени пользователя root на системной консоли.
Для этого я использовал параметр init = / sbin / myInit . В этом сценарии я выполняю некоторую инициализацию, и в конце я вызываю bash , чтобы позволить пользователю вводить команды. Интерактивный bash всегда появляется на экране.
К сожалению, есть проблема со вводом, которую я не смог решить: ввод не работает правильно. Когда я нажимаю ввод, работает только второй ввод, но новая строка на экране не выполняется. И когда я набираю некоторые символы, не все символы читаются. Похоже, что консоль находится в каком-то режиме Unicode ( stty -a показывает параметр iutf8 ), и bash не может правильно прочитать ввод. Вывод в порядке, все команды echo в моем скрипте правильно выводятся на экран (я печатаю только символы ASCII).
Я пробовал всевозможные комбинации, с разными LC_ALL настройками ( LC_ALL = C , LC_ALL = C.utf-8 , нет LC_ALL или LANG инициализация переменных), перенаправление stdin / stdout / stderr на / dev / console , / dev / tty0 или / dev / tty1 , переменная TERM инициализируется значением linux , но ничего не работает. Я пытался unicode_start и unicode_stop команды, но unicode_stop не работает, и я получаю сообщение об ошибке "stty: standard input: неспособен выполнить все запрошенные операции ». Если я запускаю команду showkey и нажимаю клавишу ввода, обнаруживается правильный код клавиши 28, как и при обычной загрузке.
Еще более странным является тот факт, что если я использую параметр ядра init = / bin / bash , то ввод работает нормально, и если я вручную запускаю свой скрипт, он также работает нормально. Если я копирую исполняемый файл bash во что-то вроде / bin / mys и использую init = / bin / mys , возникает такая же проблема ввода. Кажется, что образ initrd обрабатывает / bin / bash по-другому. Может быть, он выполняет некоторую инициализацию или что-то, что позволяет bash правильно читать с терминала. Почему мы имеем эту разницу между init = / bin / bash и init = / bin / mys ? Это тот же исполняемый файл в конце.
Что я делаю не так?
В качестве общего вопроса о программе init , может кто-нибудь объяснить мне, что должна делать программа init для правильной работы? Какие-то конкретные сигналы, на которые он должен реагировать, любая инициализация консоли должна быть выполнена?
Я пытаюсь решить это в течение нескольких дней, и я не могу найти никакого решения. В Интернете я не смог найти ни одной статьи об этом. Так что любое предложение будет с благодарностью. Спасибо.