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
?バージョンや OS によって異なるのでしょうか、それとも何か見落としているのでしょうか?
答え1
私も同じ問題を抱えています。マニュアルページを参照すると、
それ以外の場合、設定/権限の問題がある場合、または sudo が指定されたコマンドを実行できない場合、sudo は終了値 1 で終了します。後者の場合、エラー文字列が stderr に出力されます。sudo がユーザーの PATH 内の 1 つ以上のエントリを stat(2) できない場合、エラーが stderr に出力されます。(ディレクトリが存在しない場合、または実際にはディレクトリでない場合は、エントリは無視され、エラーは出力されません。) これは通常の状況では発生しません。stat(2) が "permission denied" を返す最も一般的な理由は、自動マウント機能を実行していて、PATH 内のディレクトリの 1 つが現在アクセスできないマシン上にある場合です。
つまり、OS X のバグのようです。
答え2
sudoのマニュアルページを何度も読んだ後、Bugzillaをチェックしましたここsudo のこの動作は、1.8 ブランチからマージされた後の 1.7.10 で発生したバグです。
「権限」を確認するために使用する場合sudo -n command &>/dev/null ; echo $?
、sudo バージョン 1.7.9b1 以前を使用していることを確認してください。