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


17

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

su - root

在我的shell脚本文件的开头,它会提示用户输入密码,然后它与外壳脚本的其余部分继续。然后,我必须通过终端手动定位并运行Shell脚本。我希望脚本确保用户以root用户身份登录,然后继续执行其余的Shell脚本。

换句话说,我想以任何用户身份运行脚本,但是一旦脚本开始执行,用户必须更改为root用户,然后以root用户身份继续其余脚本,直到完成。能做到吗?

Answers:


34

这很容易实现:

#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"

如果当前用户不是root用户,请通过重新执行脚本sudo

请注意,我在sudo这里使用而不是su。这是因为它允许您保留参数。如果您使用su,则您的命令必须是su -c "$0 $@"这样,如果它们带有空格或特殊的shell字符,它将使参数变乱。

如果您的shell是bash,则可以避免外部调用whoami

(( EUID != 0 )) && exec sudo -- "$0" "$@"

抱歉,我在解释中犯了一个错误,因此可能被误解了。这是更清楚的解释。谢谢您的帮助!
雷德森2014年

@ user68857您的问题很明确。这个答案正是您想要的。
帕特里克

我不断收到此错误:sudo:必须为setuid root
Redson 2014年

我想通过终端以普通用户身份运行脚本,但是脚本应将用户切换为root用户,直到脚本结束
Redson 2014年

@Nosscire如果您正在获取sudo: must be setuid root,则您的sudo发生了某些事情。要解决此问题:chmod u+s $(which sudo)。是的,我很了解您要执行的操作,我一直在脚本中执行相同的操作。
帕特里克

7

您也可以检查UID:

 if [ $(id -u) != 0 ]; then
     echo "You're not root"
     # elevate script privileges
 fi

5

您可以调用脚本本身并检查:

#! /bin/bash

if [ "root" != "$USER" ]; then
  su -c "$0" root
  exit
fi

...

0

在您要登录的位置,只需添加以下命令

sudo su

这与我的代码完美配合

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.