Вот как я могу это сделать:
if [ "x$(curl -Isqw '%{http_code}' -o /dev/null http://example.com/)" = 'x200' ]; then echo "yep"; else echo "nope"; fi
Чтобы разобрать это:
-o /dev /нуль
. Это останавливает весь вывод curl, что позволяет нам сосредоточиться на нашей добыче, коде состояния. (-I
— это любезность сервера: мы все равно отбрасываем ответ, поэтому запрашиваем только заголовки ответа) - w '%{http_code}'
флаг. "$()"
и добавьте букву x, чтобы убедиться, что в строке всегда что-то есть, даже если команда дает сбой и сгорает ( Старые привычки умирают с трудом). На этом этапе правильнее было бы проверить код возврата команды curl, но, поскольку любые сбои теперь в любом случае аккуратно сопоставляются с результатом «не 200», мы не будем беспокоиться. [
(обычно находится в /bin/[
, которая часто является символической ссылкой на /bin/test
), чтобы проверить, строка идентична "x200" if
, чтобы выбрать, что выводить. Фактический синтаксис для if
может варьироваться от одной оболочки к другой; этот будет работать с sh
, bash
и их родственниками. Я совершил огромную ошибку
Вы действительно сделали. Способ исправить это - найти способ запустить команду от имени суперпользователя, но без использования настроенной оболочки входа суперпользователя.
Спасательные и аварийные режимы не помогут , если вам не повезет иметь / usr
на отдельном томе диска - по иронии судьбы противоположная тенденции последних 30 годы. Если том диска, содержащий / usr / local / bin / st
, не является корневым, файл не будет исполняемым. В такой ситуации при экстренном входе в систему с использованием таких как sulogin
или Emergency-login
будет предпринята попытка вернуться к имени зашитой оболочки.
Другой способ добиться этого - использовать параметр -s
для sudo
, который запускает оболочку, заданную переменной среды SHELL
, как интерактивную оболочку, а не оболочка, указанная в базе данных учетных записей пользователей для суперпользователя. (Сравните параметр -i
.)
doas -s
аналогичным образом использует оболочку, указанную переменной среды SHELL
.
Команды su
некоторых операционных систем также могут делать это с параметром - shell
. Однако это не универсально. Более того, он игнорируется, как вы уже заметили, если оболочка суперпользователя в базе данных учетных записей отсутствует в списке авторизованных оболочек ( / etc / shells
).