init: необходимо запускать как PID 1

Цитирую.

В сценарии используйте "$1", а не просто $1.

В командной строке используйте

./script '*(ontehu'

вместо

./script *(ontehu

  • ./script.sh (abcЭто синтаксическая ошибка в грамматике оболочки.

  • ./script.sh &&Это заставляет оболочку думать, что в командной строке есть условное И, и она ожидает что-то в правой части оператора &&.

  • ./script.sh &abcЭто две команды :./script, запущенные как фоновый процесс (с помощью &), и команда abc.

Во всех этих случаях аргумент должен быть заключен в (одинарные кавычки, в идеале, если вам не нужно, чтобы оболочка вставляла значение переменной оболочки, и в этом случае он должен быть заключен в двойные кавычки ).


Ваш сценарий:

if [[ $1 =~ ^[A-Za-z_]+$ ]]; then
  echo it matches
else
  echo does_not match
fi

Цитата$1:

if [[ "$1" =~ ^[A-Za-z_]+$ ]]; then
  echo it matches
else
  echo does_not match
fi

Разрешить использование цифр в конце значения:

if [[ "$1" =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]; then
  echo it matches
else
  echo does_not match
fi

Правильно сообщайте об ошибках (это лишнее):

if [[ "$1" =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]; then
  printf '"%s" is a valid variable name\n' "$1"
else
  printf '"%s" is not a proper variable name\n' "$1" >&2
  exit 1
fi
0
18.01.2020, 20:14
1 ответ

Вы не можете использовать 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
28.01.2020, 02:38

Теги

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