看起來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 無法執行給定命令,則 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 及更早版本。