Какова цель «истина» в bash «если sudo true; then »

Оказывается, в /etc/init.d/gunicorn был сценарий, который создавал и давал права доступа к каталогу каждый раз при запуске gunicorn. Я просто изменил разрешения в этом файле, и все работает нормально. Это было действительно сложно найти

20
27.03.2019, 14:00
3 ответа

Как я вижу в этом сценарии. Он просто проверяет, включен ли sudo, вот и все..

true просто возвращает true.

Таким образом, в этом случае, если им нужно запустить какую-либо команду с помощью sudo, он сначала проверяет при запуске, запрашивая пароль только один раз.

Условие работает следующим образом :Если sudo правильно выполняет команду true, она вернет true для условия if,тогда sudo включен и пользователь ввел пароль правильно, иначе вы ввели неправильный пароль или sudo не включен, сценарий не должен продолжаться.

Другим командам не нужно спрашивать пароль sudo, потому что ваша аутентификация прошла успешно с первого раза (но это зависит от конфигурации sudo, поэтому эти скрипты сильно зависят от конфигурации среды)

Это также демонстрирует эхо-пароль. сценарий оболочки больше не будет запрашивать пароль.

5
27.01.2020, 19:43

true в bash — это не ключевое слово, это программа, которая мгновенно завершает работу с успешным кодом выхода. Точно так же false— это программа, которая завершается с неудачным кодом выхода.

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

true
echo $? # 0
false
echo $? #1

if sudo trueне эквивалентно if sudo == true. if sudo trueзапускает программу true, используя sudo, и проверяет код выхода.

Поэтому:

if sudo false; thenзапускает программу falseкак sudo. Возврат всегда будет ложным.

if sudo true == falseзапустит программу trueс аргументами ==и false, используя sudo. Это явно не то, чего вы хотели.

if [!(sudo true)]недопустимый синтаксис.

Вероятно, вы ищете

if ! sudo true;
39
27.01.2020, 19:43

Я чувствую, что принятый ответ на самом деле не отвечает на ваш вопрос?

Целью этого является проверка того, sudoчто вы действительно можете sudo.

Как эта проверка выполняется с помощью программы true, как объяснено в принятом ответе.

21
27.01.2020, 19:43

Теги

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