Похоже, sudo -n в Mac OS X (10.10.3) всегда возвращает 0 в качестве кода возврата.

Таким образом, что-то вроде этого всегда будет показывать 0, независимо от того, прошел ли пользователь проверку подлинности с помощью своего пароля:

sudo -n true &> /dev/null ; echo $?

В случае, если у пользователя нет действительного сеанса sudo, я ожидаю увидеть 1 в качестве кода выхода, но в OS X он всегда возвращает 0.

Я спрашиваю, поскольку видел этот шаблон, предложенный для проверки доступа к sudo, например, здесь: https://superuser.com/a/587876/119764

Какой официальный (???) поведение sudo -n? Отличается ли он версией или ОС, или я что-то упустил?

2 ответа2

2

Прочитав man-страницу sudo снова и снова, я проверил Bugzilla здесь. Такое поведение sudo является ошибкой, которая появилась в 1.7.10 после слияния из ветки 1.8.

Если вы хотите использовать sudo -n command &>/dev/null ; echo $? чтобы проверить свои «привилегии», убедитесь, что у вас установлена версия sudo 1.7.9b1 и более ранние.

1

У меня такая же проблема. Ссылаясь на справочную страницу,

В противном случае sudo завершает работу со значением выхода 1, если существует проблема конфигурации / разрешения или если sudo не может выполнить данную команду.  В последнем случае строка ошибки выводится в stderr.  Если sudo не может использовать stat(2) для одной или нескольких записей в PATH пользователя, в stderr выдается ошибка.  (Если каталог не существует или если он не является каталогом, запись игнорируется и ошибка не печатается.)  Это не должно происходить при нормальных обстоятельствах.  Наиболее распространенная причина, по которой stat(2) возвращает "отказано в разрешении", заключается в том, что вы запускаете автомонтирование, и один из каталогов в вашей переменной PATH находится на компьютере, который в данный момент недоступен.

Так что, похоже, ошибка в OS X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .