linux标准输入密码,在Deepin 20下用普通用户执行脚本时弹窗要求输入管理密码

下面所要实现的效果是在Deepin 20下用普通用户执行脚本时,自动的弹窗出来,要求你输入正确的管理密码才能进行下去,同时当你sudo或者以root用户执行时就直接进行。该bash脚本也可用在其他Linux发行版上。

22fd730c1b00cdfebfb941bfa76aeacf.png

适合以下用途

1.把脚本绑定到键盘快捷键上。

2.把脚本绑定到启动器上。

3.各种需要root执行脚本但是不希望弹出一个不严谨的终端窗口输入密码的情况。

实际操作演说

首先我们知道在GNU/Linux桌面弹窗获取密码的命令是:

pkexec

大家可以试试用这个命令代替sudo,它是freedesktop的标准,在符合标准的各大桌面都能用。

然后脚本的第一行#!(shebang符号)表示的是脚本解释器,那么第一种简单的解决方法就来啦。

b841d6e0e2276914e77972490b1fc516.png

第一行写:

#!/bin/pkexec /bin/bash

然后按正常脚本写就行了。

但是这样看起来他简单了,无法体现读者一个bash大神的修养。另外缺陷就是如果需要root命令前后用当前普通用户身份执行命令,刚才那个脚本就不适合了。

比如说我想用notify-send命令给我的桌面发送通知,但是你要用root发送的话,那不就发给root了嘛,自己是收不到的。

因此我们想到用whoami可以判断当前用户的身份(大家自己试试在终端输入whoami和sudo whoami有什么区别),参考whoami命令_Linux whoami命令使用详解:打印当前有效的用户名称。

那么我们就在开头来一判断,如果是root就直接执行,如果是普通用户就pkexec执行不就完啦。

于是我们有这个脚本(bash基础不好的话可以补一补基础,先把答案给大家看)。

0af75b3d13509ec129849ef5fb29e7ad.png

重点是第7行,因为在bash里$加数字表示获取传入参数,而第0个参数必定是执行的脚本本身。这样写就是在普通用户执行脚本时,获取root权限然后再“递归”执行脚本,这时身份是root,自然就进入第一个分支啦。

然后容易出错的地方是if的写法,bash的if写法着实离奇,我最初学习bash的时候怎么看怎么不顺眼,觉得他又丑又容易错。

if 左方括号 左边 等号 右边 右方括号之间都要用空格隔开(后面还要写then,换行或者加;隔开,最后还要fi)。

后来才知道,原来(左方括号)[是一个程序(不信大家自己ls /bin)。

现在看这个命令真是合情合理,又鬼斧神工。

最后不要忘了,右键属性权限管理,勾上“允许以程序执行”,然后就可以运行啦。

下图是一个示范,用脚本更新系统:

7015d4869864a38ace8a194a10fa3476.png

相关主题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值