我不确定是否sudo
支持这样,我想执行一个命令,只有这个命令配置为NOPASSWD,即如果该命令可以无密码运行,则运行它;否则直接退出。
到目前为止,唯一的选择似乎是列出所有可用的命令并sudo -l
手动解析输出,这看起来很脏。
还有其他选择吗?
答案1
不是很漂亮,但缺乏解析,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
因需要密码而失败,或者您运行的命令是否失败。所以你需要解析输出。 (幸运的是,错误消息是静态的,因此这应该不会太难。但要注意本地化。)