Iva*_*jev 59 linux sudo bash ubuntu
网站上有一些问题似乎与我的问题有关,但我无法在其中任何一个问题中找到解决方案。
我的操作系统是 Ubuntu 12.04。我已经mvn安装/tools/noarch/apache-maven-3.1.1并在我的末尾添加了以下几行/etc/profile:
export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
之后我执行source /etc/profile.
现在我的问题是:当我运行mvn --version命令成功并mvn找到可执行文件时,如果我执行:sudo mvn --version我得到输出:sudo: mvn: command not found。我知道PATH当我执行命令时可能会有所不同sudo,这就是我尝试这样做的原因:
$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...
Run Code Online (Sandbox Code Playgroud)
我尝试的另一件事是执行sudo su -然后键入mvn --version. 在这种情况下mvn成功找到并且命令成功。这里发生了什么?
opy*_*ate 49
给sudo你的电流PATH:
sudo env "PATH=$PATH" your_command
Run Code Online (Sandbox Code Playgroud)
Dan*_*eck 44
$PATH 由您的 shell 进行评估,因此您的检查无法按预期进行。
/etc/sudoers配置为用PATH默认的替换您的。
sudo在执行命令之前不会加载登录 shell 环境,因此使用默认的PATHfrom /etc/sudoers。su -确实打开了一个登录外壳,其中涉及加载/etc/profile. 请参阅调用man bash部分。
只是删除了PATH复位/etc/sudoers。这很可能是一个名为secure_path.
在 CentOS 中,您可以添加PATH到该Defaults env_keep部分:
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
_XKB_CHARSET XAUTHORITY PATH"
Run Code Online (Sandbox Code Playgroud)
Tom*_*Tom 14
详细说明@opyate 的答案,我使用了以下 shell 脚本(mysudo例如,它可能被命名为 ):
#!/bin/bash
sudo -E env "PATH=$PATH" "$@"
Run Code Online (Sandbox Code Playgroud)
-E说sudo要保护环境。env "PATH=$PATH"在sudo调用外部扩展,使外部也PATH可以在内部使用sudo(这是必需的,-E因为PATH除了整个环境接受的处理之外,通常还接受特殊处理)。"$@"将我们的脚本接收到的参数传递给该sudo行。将脚本保存在 目录中的文件中PATH,授予它+x权限,等等。
| 归档时间: |
|
| 查看次数: |
110188 次 |
| 最近记录: |