Tim*_*Tim 2 sudo environment-variables
到目前为止,我在这里看到的其他解决方案基于一些系统定义,但实际上可以通过正确调用它来
sudo使用当前PATH(使用env命令)和/或环境的其余部分(使用-E选项) :Run Code Online (Sandbox Code Playgroud)sudo -E env "PATH=$PATH" <command> [arguments]事实上,我们可以用它来做一个别名:
Run Code Online (Sandbox Code Playgroud)alias mysudo='sudo -E env "PATH=$PATH"'(也可以自己命名别名
sudo,替换原来的sudo.)
鉴于
-E, --preserve-env 指示用户希望保留其现有环境变量的安全策略。如果用户没有保护环境的权限,安全策略可能会返回错误。
我想知道为什么以下不起作用
sudo -E <command> [arguments]
Run Code Online (Sandbox Code Playgroud)
?
鉴于这"PATH=$PATH" <command> [arguments]也是一个命令,我想知道为什么以下不起作用:
sudo "PATH=$PATH" <command> [arguments]
Run Code Online (Sandbox Code Playgroud)
?
谢谢。
sudo -E <command> [arguments]
Run Code Online (Sandbox Code Playgroud)
在您的情况下不起作用,因为 Debian 定义了secure_pathin /etc/defaults,它覆盖了PATHeven with的值-E。
sudo "PATH=$PATH" <command> [arguments]
Run Code Online (Sandbox Code Playgroud)
应该可以工作,因为PATH=$PATH被 识别和处理sudo。在我的情况下sudo "PATH=$PATH" env显示了我的当前PATH值。(请注意,这PATH=$PATH <command>不是普遍认可的命令;它对应于由 shell 和 识别的构造sudo,但不一定在其他上下文中。)。
然而,sudo它本身并不使用它$PATH来查找<command>并且仍然使用secure_path.
sudo -E env "PATH=$PATH" <command> [arguments]
Run Code Online (Sandbox Code Playgroud)
之所以有效,是因为"PATH=$PATH"将 的当前值存储PATH在命令中,如sudo和 then所见env;sudo替换其环境中PATH给定的 的值env,env然后从其参数中读取值以构建环境<command>。
在这里,env命令由sudoin查找secure_path,但env它本身<command>在提供的$PATH.
| 归档时间: |
|
| 查看次数: |
4603 次 |
| 最近记录: |