Автоматически регистрирующийся пользователь запускает сломанный скрипт при входе в систему, совет, как получить доступ к pc?

По сути, ваша проблема заключается в Почему мой shell-скрипт захлебывается на пробелах или других специальных символах?

Когда вы пишете $curl_command вне кавычек, это берет значение переменной curl_command и разбивает его на отдельные слова в каждой последовательности пробелов. (Затем каждое слово интерпретируется как шаблон подстановочного знака и заменяется списком подходящих имен файлов, если есть подходящие имена файлов, но в вашем случае подстановочных знаков нет, поэтому этот шаг ничего не меняет).

Кавычки являются частью синтаксиса оболочки. На них не влияет расширение переменных без кавычек. Поэтому команда $curl_command выполняет curl с аргументами -g, -x, "" и -k.

Вы пытаетесь запихнуть список строк (аргументов команды) в строку. Это плохо работает. На самом деле, вы получите пустое слово.

Надежным решением является использование переменной типа list of strings для хранения списка строк. В оболочке это называется массивом. Bash, ksh и zsh поддерживают массивы:

curl_command=(curl -g -x "" -k)
…
"${curl_command[@]}" http://www.example.com/rest/v1/blah

Переменная curl_command содержит массив из 5 элементов, элементами которого являются curl, -g, -x, пустая строка и -k.

Если вам нужен обычный сценарий sh, вы можете использовать позиционные параметры, предполагая, что они больше ни для чего не нужны.

set -- curl -g -x "" -k
…
"$@" http://www.example.com/rest/v1/blah

Другой возможностью может быть использование функции для инкапсуляции кода, который вы хотите использовать несколько раз.

curl_command () {
  curl -g -x "" -k "$@"
}
…
curl_command http://www.example.com/rest/v1/blah

0
27.06.2018, 12:35
2 ответа

Загрузите работающий Linux (, например. установка Linux Mint с USB-накопителя ), смонтируйте корневой раздел с внутреннего диска, найдите и исправьте/отключите фиктивный скрипт.

0
28.01.2020, 02:42

Прежде всего, вы должны войти в однопользовательский режим и перемонтировать необходимые разделы с опцией rw.


Загрузка в однопользовательском режиме

Прерывание процесса загрузки для доступа к меню GRUB. Для этого нажмите любую клавишу, когда отображается «Загрузка в.... в X» .

Войдите в режим редактирования вашего последнего ядра (или того, которое вы используете по умолчанию ), и отредактируйте строку, начинающуюся с linux /boot/vm* <..> ro quiet splash, и добавьте init=/bin/bashв конец.

Нажмите F10для сохранения и нажмите bдля загрузки с новой опцией.

Это загрузит вас в корневую оболочку (у вас не будет графического интерфейса ). Теперь перемонтируйте root как файловую систему, доступную для записи.

mount -o rw,remount /


Устранение проблемы

Выберите один:


+-Исследуйте проблему непосредственно в однопользовательском режиме.

Найдите сломанный скрипт в /etc/profile, /home/guest/.bashrcили любом другом файле конфигурации, полученном в процессе входа в систему.


+-Отключить автоматический вход гостя в систему по умолчанию.

Измените строку autologin-user=userв /etc/lightdm/lightdm.confна autologin-user=.


Возобновление процесса загрузки

Перемонтируйте корневую файловую систему в режим roс помощью mount -o ro,remount /.

Выполните /sbin/init, чтобы продолжить процесс загрузки, или нажмите CTRL+d, чтобы перезагрузить машину.


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

1
28.01.2020, 02:42

Теги

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