为什么 Mac OS X 上的 sudo -n 总是返回 0?

为什么 Mac OS X 上的 sudo -n 总是返回 0?

看起来sudo -nMac 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 无法执行给定的命令,则 sudo 退出,退出值为 1。在后一种情况下,错误字符串将打印到 stderr。如果 sudo 无法 stat(2) 用户 PATH 中的一个或多个条目,则会在 stderr 上打印错误。(如果目录不存在或它实际上不是目录,则忽略该条目并且不会打印任何错误。)正常情况下不会发生这种情况。stat(2) 返回“权限被拒绝”的最常见原因是,如果您正在运行自动挂载程序,并且 PATH 中的目录之一位于当前无法访问的计算机上。

所以这似乎是 OS X 的一个错误。

答案2

在反复阅读 sudo 手册页后,我检查了 Bugzilla这里。sudo 的这个行为是从 1.8 分支合并后在 1.7.10 中出现的一个错误。

如果您想使用它sudo -n command &>/dev/null ; echo $?来检查您的“权限”,请确保您拥有 sudo 版本 1.7.9b1 及更早版本。

相关内容