Як перевірити, чи був введений пароль для цього термінального сеансу?


16

Як сказано в заголовку, мені потрібно перевірити, чи був введений пароль sudo для цього термінального сеансу в оболонці (він же, якщо я маю права на судо зараз).

Якщо я маю це, я хотів би зробити одне, а якщо у мене його немає, то воно не повинно мені спонукати до цього, просто дозвольте мені зробити іншу справу.

Так у псевдокоді це виглядає приблизно так:

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) та вийде. Якщо пароль не потрібно, то цей вислів істинно: sudo -n true 2>/dev/null.


4
Це не дуже допомагає відлунювати рядок і порівнювати його з іншою рядком, вихідного коду з sudo достатньо для тесту. Першим рядком може бутиif sudo -n true 2>/dev/null; then
Стівен К

@StevenKath Це те саме, але дякую за пропозицію. Я покращив свою відповідь, оскільки ваша пропозиція є більш елегантною.
Radu Rădeanu

2
Я знаю, що це AskUbuntu, але це не працює в MacOSX, sudo -n завжди повертає 0, тому перевірка коду повернення не вдається. Я говорю це тут, тому що я шукав це, і ця сторінка з’являється в Google.
Нормалізувати

1
Це погана ідея, оскільки вона надсилатиме пошту в корінь кожного разу, коли буде потрібно пароль, якщо mail_badpassце включено в судорах.
nyuszika7h
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.