运行 shell 脚本时提示用户以 root 身份登录

运行 shell 脚本时提示用户以 root 身份登录

我遇到的问题是,当我输入命令时,

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

这与我的代码完美配合

相关内容