【bash脚本技巧】如何让脚本执行时自动弹窗要求管理密码
Tofloor
poster avatar
enforcee
deepin
2020-08-26 07:21
Author
标题有点长,大概意思就是
当你在普通用户执行脚本时,弹窗让你输入密码(如图)


当你sudo或者以root用户执行时就直接进行

特别适合场景:
1.把脚本绑定到键盘快捷键上
2.把脚本绑定到启动器上
3.各种需要root执行脚本但是超级讨厌弹出一个不严谨的终端窗口输入密码的情况

本文cc0,任意转载,编辑,无需署名


Reply Favorite View the author
All Replies
avatar
enforcee
deepin
2020-08-26 07:27
#1
首先我们知道在GNU/Linux桌面弹窗获取密码的命令是
pkexec
(大家可以试试用这个命令代替sudo)
他是freedesktop的标准,在符合标准的各大桌面都能用
然后脚本的第一行#!(shebang符号)表示的是脚本解释器
那么第一种简单粗暴又有点那个的解决方法就来啦

第一行写
#!/bin/pkexec /bin/bash
然后按正常脚本写就行了

Reply View the author
avatar
enforcee
deepin
2020-08-26 07:41
#2
但是这样看起来他简单了,无法体现读者一个bash大神的修养
另外缺陷就是如果需要root命令前后用当前普通用户身份执行命令,刚才那个脚本就不适合了
(比如说我想用notify-send命令给我的桌面发送通知,但是你要用root发送的话,那不就发给root了嘛!自己是收不到的)
因此我们想到

whoami
可以判断当前用户的身份(大家自己试试在终端输入whoami和sudo whoami有什么区别)
那么我们就在开头来一判断,如果是root就直接执行,如果是普通用户就pkexec执行不就完啦!
于是我们有这个脚本(bash基础不好的话可以补一补基础,先把答案给大家看)

重点是第7行,因为在bash里$加数字表示获取传入参数,而第0个参数必定是执行的脚本本身
这样写就是在普通用户执行脚本时,获取root权限然后再“递归”执行脚本,这时身份是root,自然就进入第一个分支啦
Reply View the author
avatar
enforcee
deepin
2020-08-26 07:46
#3
本帖最后由 enforcee 于 2020-8-25 23:51 编辑

然后容易出错的地方是if的写法
bash的if写法着实离奇,我最初学习bash的时候怎么看怎么不顺眼,觉得他又丑又容易错
if 左方括号 左边 等号 右边 右方括号之间都要用空格隔开!(后面还要写then,换行或者加;隔开,最后还要fi)
后来才知道,原来(左方括号)
[
是一个程序!!!!
(不信大家自己ls /bin)
现在看这个命令真是合情合理,又鬼斧神工
Reply View the author
avatar
enforcee
deepin
2020-08-26 07:50
#4
最后大家不要忘了
右键 属性 权限管理 勾上“允许以程序执行”

然后就可以运(逮)行(bug)啦


Reply View the author
avatar
enforcee
deepin
2020-08-26 08:31
#5
给大家弄一个示范
用脚本更新系统(有点暴力)

Reply View the author