Как проверить, был ли введен пароль sudo для этой терминальной сессии?

Как сказано в заголовке, мне нужно проверить, был ли введен пароль sudo для этого терминального сеанса в оболочке (иначе, если у меня есть права sudo сейчас).

Если у меня есть это, я хотел бы сделать одну вещь, и если у меня ее нет, то это не должно побуждать меня к этому, просто позвольте мне сделать другую вещь.

Так что в псевдокоде это выглядит так:

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

Но все команды, которые я нашел для этого, всегда запрашивают пароль sudo при попытке проверить.

Основная идея заключается в том, что скрипт может (и будет) запрашивать пароль sudo в нескольких местах, но я не хочу печатать «Теперь скрипт запросит ваш пароль sudo». если он уже был введен (что означает, что он не будет запрашивать пароль sudo).

Надеюсь, кто-нибудь может мне помочь.

15
задан 15.04.2020, 11:12

1 ответ

Вы можете использовать:

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.

20
ответ дан 15.04.2020, 11:12
  • 1
    Это - плохая идея, поскольку она отправит почту для укоренения каждый раз, когда пароль требовался бы, если mail_badpass включен в sudoers. – Adam Michalski 15.04.2020, 11:13
  • 2
    Это doesn' t действительно помогают повторить строку и сравнить его с другой строкой, код выхода от sudo достаточно для теста. Первая строка может быть if sudo -n true 2>/dev/null; then – haynar 15.04.2020, 11:13
  • 3
    @StevenKath Это делает то же самое, но благодарит за предложение. Я улучшил свой ответ, так как Ваше предложение более изящно. – jfriend00 15.04.2020, 11:13
  • 4
    Я знаю, что это - AskUbuntu, но этот doesn' t работа в MacOSX, sudo-n всегда возвращается 0 настолько проверяющий сбои кода возврата. I' m говорящий это здесь, потому что I' ve искал это, и эта страница подходит в Google. – Matt Ball 15.04.2020, 11:14

Теги

Похожие вопросы