我目前正在编写一个 bash 脚本,用于在现有的 Linux 系统(当前为 Ubuntu)上安装和设置各种程序。因为它安装程序并将许多文件复制到需要提升权限的各个文件夹,所以我已经完成了标准的“我需要提升权限”并退出。
但是,如果可能的话,我希望能够提示用户输入 sudo 密码,并在用户不使用 sudo 运行脚本命令(例如从 GUI 文件管理器启动它)时自动提升脚本的权限,用户无需重新启动脚本。
由于它被设计为在原生 Linux 安装上运行,因此任何修改系统的选项都无法满足我的目的。所有选项都需要包含在脚本本身中。
这在 Bash 中可能吗?如果是这样,最好的(安全但简洁)方法是什么?
答案1
我sudo
直接从脚本运行:
if [ $EUID != 0 ]; then
sudo "$0" "$@"
exit $?
fi
答案2
将其添加为脚本的第一行:
[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"
如果您更喜欢图形提示,请更改sudo
为gksu
或。gksudo
答案3
我建议:
#!/bin/bash
if (($EUID != 0)); then
if [[ -t 1 ]]; then
sudo "$0" "$@"
else
exec 1>output_file
gksu "$0 $@"
fi
exit
fi
# some example stuff
ls -l /root
echo "app: $0"
for f; do
echo ">$f<"
done
答案4
我用来visudo
编辑sudoers
文件如下:
- 在您的用户行中,将其添加到用户名旁边:
然后保存。ALL=(ALL) NOPASSWD: ALL
- 当该用户
他将以 root 身份登录,无需输入密码。sudo su -