我遇到的问题是,当我输入命令时,
su - root
在我的 shell 脚本文件的开头,它提示用户输入密码,然后执行不是继续 shell 脚本的其余部分。然后我必须通过终端手动找到并运行 shell 脚本。我希望脚本确保用户以 root 身份登录,然后继续执行 shell 脚本的其余部分。
换句话说,我想以任何用户身份运行脚本,但一旦脚本开始执行,用户必须更改为 root,然后以 root 身份继续执行脚本的其余部分,直到完成。这可以做到吗?
答案1
这很容易实现:
#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"
当当前用户不是root时,通过 重新执行脚本sudo
。
请注意,我sudo
在这里使用的是su
.这是因为它允许您保留参数。如果您使用su
,则您的命令必须是,su -c "$0 $@"
如果参数包含空格或特殊 shell 字符,则会破坏您的参数。
如果您的 shell 是 bash,您可以避免外部调用whoami
:
(( EUID != 0 )) && exec sudo -- "$0" "$@"
答案2
您还可以检查 UID:
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
答案3
您可以调用脚本本身并检查:
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...
答案4
在您要登录的位置,只需添加以下命令
sudo su
这与我的代码完美配合