内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
以下为没有sudo的路径变量:
$ echo 'echo $PATH' | sh /opt/local/ruby/bin:/usr/bin:/bin
这是带有sudo的路径变量:
$ echo 'echo $PATH' | sudo sh /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
据我所知,sudo对路径不应该产生任何影响,那么我应该如何消除这种影响?(版本为Ubuntu 8.04)
更新:据我所知,没有一个脚本以任何方式作为根更改路径
man sudo:
为了防止命令错误,sudo在搜索用户PATH中的命令(如果其中一个或两者都在PATH中)时会检查最后一个“.”和“”(都表示当前目录)。但是请注意,实际的PATH环境变量没有被修改,并且不变地传递给sudo执行的程序。
在/etc/sudoers
中编辑env_keep:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
只需在末尾追加路径:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
关闭终端,然后再打开就可以了。