![如何追溯使脚本以 root 身份运行?](https://linux22.com/image/60216/%E5%A6%82%E4%BD%95%E8%BF%BD%E6%BA%AF%E4%BD%BF%E8%84%9A%E6%9C%AC%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我正在编写一个 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] 传递给进程。
内核将执行任何高级引用或替换,仅根据空格、制表符、换行符和空值进行分隔。