Похоже, что 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
? Оно отличается в зависимости от версии или ОС, или я что-то упускаю?
решение1
У меня та же проблема. Ссылаясь на страницу руководства,
В противном случае sudo завершает работу со значением выхода 1, если есть проблема с конфигурацией/разрешениями или если sudo не может выполнить заданную команду. В последнем случае строка ошибки выводится на stderr. Если sudo не может stat(2) одну или несколько записей в PATH пользователя, ошибка выводится на stderr. (Если каталог не существует или если это на самом деле не каталог, запись игнорируется и ошибка не выводится.) Этого не должно происходить при нормальных обстоятельствах. Наиболее распространенной причиной, по которой stat(2) возвращает «отказано в доступе», является то, что вы запускаете автомонтирование, а один из каталогов в вашем PATH находится на машине, которая в данный момент недоступна.
Похоже, это ошибка в OS X.
решение2
После прочтения man-страницы sudo снова и снова я проверил BugzillaздесьТакое поведение sudo — ошибка, появившаяся в версии 1.7.10 после слияния с веткой 1.8.
Если вы хотите использовать sudo sudo -n command &>/dev/null ; echo $?
для проверки своих «привилегий», убедитесь, что у вас установлена версия sudo 1.7.9b1 или более ранняя.