从用户 bash 脚本中在 root shell 中运行

从用户 bash 脚本中在 root shell 中运行

我有一个脚本,除其他外,需要以 root 身份执行一些操作,例如创建安装文件夹。我试过:

echo "Linux user password is needed in order to ..."
sudo -s
# also tried:
# sudo su
... code that requires root permission
exit
... code that requires user permission

问题是脚本在“sudo -s”之后停止,并且仅在我手动退出自动创建的 root shell 后继续。

有没有办法在用户脚本中运行 root shell 命令?

谢谢。

答案1

是的,因为像这样的事情

sudo mkdir /mnt/mymountpoint

工作,你可以做

sudo ./myrootscript.sh

如果您检查合适的参数,您的脚本甚至可以再次调用自身,因此您只有一个文件。

答案2

您只是以错误的方式使用sudo两者。su如果您只编写sudo -ssudo su单独编写,您最终将得到一个从脚本内部创建的交互式 shell -这就是那些命令

既然你需要一段 shell 代码要以 root 身份执行,您需要以某种方式将其包装到单个命令中。也许最简单的方法是使用显式子 shell:

echo "Linux user password is needed in order to ..."
sudo sh -c '
 ... code that requires root permission
'

当您尝试使用脚本中其他地方定义的某些变量时,这当然会引起麻烦 - 在这种情况下,请使用双引号而不是单引号。

如果您只有几个命令需要以 root 身份运行,最好sudo在每个命令前面使用。

相关内容