我想制作一个脚本并将其添加到快捷方式启动器...
当我双击图标时,它会弹出一个终端窗口(完成)
在终端中,它会首先要求输入 root 密码,然后以 root 权限执行一些操作(我想将其作为一项功能)。
之后,在脚本的末尾,它会像“按任意键关闭窗口”一样关闭窗口(我可以做到)
#!/bin/sh
touchpad(){
whoami
}
sudo -S touchpad # but it return error "command not found"
如何以 root 用户身份运行某个功能或者是否有其他方法来实现这一点?
编辑 :
我已经尝试过这个#!/bin/bash
sudo ./main2.sh #this did not work when I made it as a launcher
exit
这是我当前的代码(经过谷歌搜索):
#!/bin/bash
gksudo -m "Input Password" clear
sudo whoami
#sudo bla bla bla
read -n 1 -p "Press any key to close window"
这就是我想要的,但是当我输入错误密码 3 次时会出现错误。如果 gksudo 失败,如何强制退出主窗口?
答案1
测试gksudo的返回值:
if ! gksudo -m "Input Password" clear ; then
echo Bad password
exit 1
fi
答案2
依我之见...最简单的方法是以 root 身份运行整个脚本,而不必记住它需要以 root 身份运行它似乎应该可以完成您想要完成的任务
#!/bin/bash
dScript=$0
if [[ ${UID} -gt 0 ]] ; then
sudo ${dScript}
exit
fi
### the rest of your script
答案3
你不能。要做到这一点,你需要将该函数放在另一个脚本中,然后使用 sudo 运行该脚本。
Sudo 仅运行命令,无法访问脚本中的函数,因为它在单独的进程中运行。如果您坚持要在脚本中运行某个函数,则可以使用 sudo 再次运行该脚本,但向其传递一个参数,该参数将$1
直接运行该函数。
答案4
你确实可以这样做:
假设您以 root 用户身份登录,并且想要为 root 以外的其他用户运行某个功能,则可以export -f
在脚本中使用该功能的选项。例如:
#!/usr/local/bin/bash
user="${SUDO_USER:-$USER}"
whomomlikes(){
echo "Hello!! $(whoami)";
}
main()
{
export -f whomomlikes;
su $user -c "bash -c whomomlikes";
}
main;
这并不意味着它只适用于导出的函数,如果您在其他函数中声明了变量,那么您必须以类似的方式导出它们,然后相应地运行它们。