この端末セッションにsudoパスワードが入力されているかどうかを確認する方法は?


16

見出しで述べたように、シェルでこの端末セッションにsudoパスワードが入力されているかどうかを確認する必要があります(sudoの権利がある場合)。

私がそれを持っている場合、私は1つのことをしたいと思います、そして私がそれを持っていない場合、それは私にそれを促さないでください、ただ私に別のことをさせてください。

そのため、擬似コードでは次のようになります。

if (sudo = true)
   echo "i got sudo"
else
   echo "i dont have sudo"
fi

しかし、このために見つけたすべてのコマンドは、チェックしようとすると常にsudoパスワードの入力を求められます。

基本的な考え方は、スクリプトがsudoパスワードをいくつかの場所で要求できる(そして要求する)ことですが、「スクリプトはsudoパスワードを要求するようになります」を出力したくありません。すでに入力されている場合(つまり、sudoパスワードを要求しないことを意味します)。

誰かが私を助けてくれることを願っています。

回答:


21

次を使用できます。

if sudo -n true 2>/dev/null; then 
    echo "I got sudo"
else
    echo "I don't have sudo"
fi

-n(非対話型)オプションが防止sudoパスワードの入力を促すから。コマンドの実行にパスワードが必要な場合はsudo、エラーメッセージ(にリダイレクトされます/dev/null)を表示して終了します。パスワードが不要な場合、この式はtrueですsudo -n true 2>/dev/null


4
文字列をエコーし​​て別の文字列と比較することは実際には役に立ちません。sudoからの終了コードでテストに十分です。最初の行であることができるif sudo -n true 2>/dev/null; then
スティーブン・K

@StevenKath同じことをしますが、提案をありがとう。あなたの提案がよりエレガントになったので、答えを改善しました。
ラドゥRădeanu

2
これはAskUbuntuですが、MacOSXでは機能しません。sudo-nは常に0を返すため、戻りコードのチェックは失敗します。私がこれを検索したのは、このページがGoogleに表示されるためです。
Normadize

1
mail_badpasssudoersで有効になっている場合、パスワードが必要になるたびにルートにメールを送信するため、これは悪い考えです。
nyuszika7h
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.