要在当前 shell 中执行 shell 脚本,我们需要使用句 .
或 source
命令。但为什么它不适用于 sudo
权限?
我有一个名为 setup.sh
的具有执行权限的脚本。当我使用句号时,我得到这个:
$ sudo . ./setup.sh
sudo: .: command not found
source
命令也会产生类似的错误。我错过了什么吗?我应该怎么做才能在 同一个/当前 shell 中使用 sudo
权限运行脚本?
原文由 shar 发布,翻译遵循 CC BY-SA 4.0 许可协议
您尝试做的事情是不可能的;您当前的 shell 在您的常规用户 ID 下运行(即没有 root 访问权限
sudo
会给您),并且 _无法授予它 root 访问权限_。sudo
所做的是创建一个以 root 身份运行的新 *sub* 进程。子进程可能只是一个常规程序(例如sudo cp ...
在根进程中运行cp
程序),也可能是根子shell,但 不能 是当前shell。(实际上比这更不可能,因为
sudo
命令本身是作为当前 shell 的子进程执行的——这意味着从某种意义上说,在“当前 shell”中做任何事情已经太迟了”,因为那不是它执行的地方。)