使用 sudo 权限在当前 shell 中执行 shell 脚本

新手上路,请多包涵

要在当前 shell 中执行 shell 脚本,我们需要使用句 .source 命令。但为什么它不适用于 sudo 权限?

我有一个名为 setup.sh 的具有执行权限的脚本。当我使用句号时,我得到这个:

 $ sudo . ./setup.sh
sudo: .: command not found

source 命令也会产生类似的错误。我错过了什么吗?我应该怎么做才能在 同一个/当前 shell 中使用 sudo 权限运行脚本?

原文由 shar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您尝试做的事情是不可能的;您当前的 shell 在您的常规用户 ID 下运行(即没有 root 访问权限 sudo 会给您),并且 _无法授予它 root 访问权限_。 sudo 所做的是创建一个以 root 身份运行的新 *sub* 进程。子进程可能只是一个常规程序(例如 sudo cp ... 在根进程中运行 cp 程序),也可能是根子shell,但 不能 是当前shell。

(实际上比这更不可能,因为 sudo 命令本身是作为当前 shell 的子进程执行的——这意味着从某种意义上说,在“当前 shell”中做任何事情已经太迟了”,因为那不是它执行的地方。)

原文由 Gordon Davisson 发布,翻译遵循 CC BY-SA 3.0 许可协议

我不确定这是否违反任何规则,但

sudo bash script.sh

似乎对我有用。

原文由 JaseC 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题