如何追溯使脚本以 root 身份运行?

如何追溯使脚本以 root 身份运行?

我正在编写一个 shell 脚本,需要以 root 权限运行。

我可以检查用户是否具有 root 权限sudo -nv || echo "no sudo",但这对我没有帮助,如果他的凭据仍然由 缓存sudo,但他没有用它调用我的脚本。所以我无法对用户做出反应,无法使用 sudo 调用我的脚本。

我可以把它放在sudo每个需要它的命令前面,所以只需检查用户是否具有 root 权限就足够了,但在我看来,应该有更好的解决方案。

我正在寻找一个命令,我可以将其放入我的脚本中,该命令要求用户提供 root 权限,如果提供,则执行脚本的其余部分,就像用户首先使用 root 权限调用它一样。

我想要的是:

#!/bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

mv /bin/cmd1 /bin/cmd2    # requires root

编辑过2次

答案1

测试你是否是root,如果没有,请使用 重新启动sudo,例如:

#! /bin/bash

if [[ $EUID -ne 0 ]];
then
    exec sudo /bin/bash "$0" "$@"
fi

答案2

 #!/bin/sudo /bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

she-bang 不仅仅适用于贝壳。该文件由内核访问 - 就像任何可执行文件一样。内核解释开头的“#!”执行第一项的指示符,并将后续项作为新进程的单个参数。还要安排将脚本文件路径作为 argv[2] 传递给进程。

内核将执行任何高级引用或替换,仅根据空格、制表符、换行符和空值进行分隔。

相关内容