下面所要实现的效果是在Deepin 20下用普通用户执行脚本时,自动的弹窗出来,要求你输入正确的管理密码才能进行下去,同时当你sudo或者以root用户执行时就直接进行。该bash脚本也可用在其他Linux发行版上。
适合以下用途 1.把脚本绑定到键盘快捷键上。 2.把脚本绑定到启动器上。 3.各种需要root执行脚本但是不希望弹出一个不严谨的终端窗口输入密码的情况。
实际操作演说 首先我们知道在GNU/Linux桌面弹窗获取密码的命令是: pkexec 大家可以试试用这个命令代替sudo,它是freedesktop的标准,在符合标准的各大桌面都能用。 然后脚本的第一行#!(shebang符号)表示的是脚本解释器,那么第一种简单的解决方法就来啦。
第一行写: #!/bin/pkexec /bin/bash 然后按正常脚本写就行了。 但是这样看起来他简单了,无法体现读者一个bash大神的修养。另外缺陷就是如果需要root命令前后用当前普通用户身份执行命令,刚才那个脚本就不适合了。 比如说我想用notify-send命令给我的桌面发送通知,但是你要用root发送的话,那不就发给root了嘛,自己是收不到的。 因此我们想到用whoami可以判断当前用户的身份(大家自己试试在终端输入whoami和sudo whoami有什么区别),参考whoami命令_Linux whoami命令使用详解:打印当前有效的用户名称。 那么我们就在开头来一判断,如果是root就直接执行,如果是普通用户就pkexec执行不就完啦。 于是我们有这个脚本(bash基础不好的话可以补一补基础,先把答案给大家看)。
重点是第7行,因为在bash里$加数字表示获取传入参数,而第0个参数必定是执行的脚本本身。这样写就是在普通用户执行脚本时,获取root权限然后再“递归”执行脚本,这时身份是root,自然就进入第一个分支啦。 然后容易出错的地方是if的写法,bash的if写法着实离奇,我最初学习bash的时候怎么看怎么不顺眼,觉得他又丑又容易错。 if 左方括号 左边 等号 右边 右方括号之间都要用空格隔开(后面还要写then,换行或者加;隔开,最后还要fi)。 后来才知道,原来(左方括号)[是一个程序(不信大家自己ls /bin)。 现在看这个命令真是合情合理,又鬼斧神工。 最后不要忘了,右键属性权限管理,勾上“允许以程序执行”,然后就可以运行啦。 下图是一个示范,用脚本更新系统:
相关主题 |