Не выполняйте команду с помощью sudo, если она не настроена как без пароля

Я не уверен, поддерживает ли sudo , я хочу выполнить команду, только если эта команда настроена как NOPASSWD, то есть, если команда может быть запущена без пароля, запустите ее; В противном случае выходите напрямую.

Пока единственным вариантом является список всех доступных команд с помощью sudo -l и анализ вывода вручную, который выглядел грязным.

Есть ли альтернативы?

Не очень красиво, но не хватает парсинга sudo -l поскольку вы делаете. Я не знаю альтернативы: просто запустите свою команду с помощью ключа -n :

Параметр -n (неинтерактивный) запрещает sudo запрашивать у пользователя пароль. Если для выполнения команды требуется пароль, sudo отобразит сообщение об ошибке и выйдет.

Пример:

 me$ sudo -l User me may run the following commands on this host: (ALL) NOPASSWD: /usr/bin/vim (ALL) /usr/bin/nano me$ sudo -n nano /etc/hosts sudo: a password is required me$ echo $? 1 me$ sudo -n vim /etc/hosts # :q me$ echo $? 0 

Проблема с этим заключается в том, что вы не можете напрямую указать код выхода, если sudo не удалось, потому что ему нужен пароль, или если команда, с которой вы работаете, не удалась. Таким образом, вам нужно проанализировать вывод. (К счастью, сообщение об ошибке статично, поэтому это не должно быть слишком сложно. Остерегайтесь локализации, хотя.)