reset $SHELL to it's default value [duplicate]

Вот как я могу это сделать:

if [ "x$(curl -Isqw '%{http_code}' -o /dev/null http://example.com/)" = 'x200' ]; then echo "yep"; else echo "nope"; fi

Чтобы разобрать это:

  1. Установите флаги «silent» и «quiet» в curl и перенаправьте фактический ответ в битовое ведро с помощью -o /dev /нуль. Это останавливает весь вывод curl, что позволяет нам сосредоточиться на нашей добыче, коде состояния. (-I — это любезность сервера: мы все равно отбрасываем ответ, поэтому запрашиваем только заголовки ответа)
  2. Попросите curl вывести код ответа с - w '%{http_code}'флаг.
  3. Соберите весь вывод в одну строку с помощью синтаксиса "$()" и добавьте букву x, чтобы убедиться, что в строке всегда что-то есть, даже если команда дает сбой и сгорает ( Старые привычки умирают с трудом). На этом этапе правильнее было бы проверить код возврата команды curl, но, поскольку любые сбои теперь в любом случае аккуратно сопоставляются с результатом «не 200», мы не будем беспокоиться.
  4. Используйте команду [ (обычно находится в /bin/[, которая часто является символической ссылкой на /bin/test), чтобы проверить, строка идентична "x200"
  5. Теперь у нас уже есть логическое значение, но поскольку в вопросе задано "строковое логическое значение", наконец, используйте if, чтобы выбрать, что выводить. Фактический синтаксис для if может варьироваться от одной оболочки к другой; этот будет работать с sh, bash и их родственниками.
1
13.04.2017, 15:36
1 ответ

Я совершил огромную ошибку

Вы действительно сделали. Способ исправить это - найти способ запустить команду от имени суперпользователя, но без использования настроенной оболочки входа суперпользователя.

Спасательные и аварийные режимы не помогут , если вам не повезет иметь / usr на отдельном томе диска - по иронии судьбы противоположная тенденции последних 30 годы. Если том диска, содержащий / usr / local / bin / st , не является корневым, файл не будет исполняемым. В такой ситуации при экстренном входе в систему с использованием таких как sulogin или Emergency-login будет предпринята попытка вернуться к имени зашитой оболочки.

Другой способ добиться этого - использовать параметр -s для sudo , который запускает оболочку, заданную переменной среды SHELL , как интерактивную оболочку, а не оболочка, указанная в базе данных учетных записей пользователей для суперпользователя. (Сравните параметр -i .)

doas -s аналогичным образом использует оболочку, указанную переменной среды SHELL .

Команды su некоторых операционных систем также могут делать это с параметром - shell . Однако это не универсально. Более того, он игнорируется, как вы уже заметили, если оболочка суперпользователя в базе данных учетных записей отсутствует в списке авторизованных оболочек ( / etc / shells ).

0
28.01.2020, 01:02

Теги

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