【问题标题】:ubuntu 10.04 sudo and pathubuntu 10.04 sudo 和路径
【发布时间】:2026-01-08 06:00:01
【问题描述】:

Ubuntu 10.04.4 LTS

我在包括 * 在内的各种网站上看到了有关 sudo 和 PATH 的帖子。我认为这是不同的,所以我很确定它不是重复的(但我不确定)。

1) 一、ruby的非sudo路径:

$ which ruby
/usr/local/ruby/bin/ruby

2) 然后是 ruby​​ 的 sudo 路径:

$ sudo which ruby
/usr/bin/ruby

好的,到目前为止一切顺利。当我使用 sudo 时路径发生了变化。

3) 但这是我不明白的部分:

$ sudo echo $PATH
/home/cm6/bin:/usr/local/ruby/bin:/usr/local/ruby/bin:/usr/local/sbin:<snipped>

即,ruby 的路径在我使用 sudo 时设置的 $PATH 变量中。

4) 又有点陌生:

$ echo $PATH
/home/cm6/bin:/usr/local/ruby/bin:/usr/local/ruby/bin:/usr/local/sbin:<snipped>

这次不用sudo,但是$PATH变量内容和sudo一样。

鉴于 $PATH 变量在有或没有 sudo 的情况下是相同的,为什么“which ruby​​”给了我不同的答案?就好像 $PATH 变量在 sudo 下没有保存真正的 PATH。

所以,最后,我的问题是:如何获得 sudo 使用的真实/准确/正确的 PATH?

谢谢,

约翰

【问题讨论】:

标签: path ubuntu-10.04 sudo


【解决方案1】:

sudo echo $PATH 在调用 sudo 之前评估 $PATH。

确定:

sudo -s
echo $PATH

您需要将PATH变量添加到/etc/sudoers中的env_keep

【讨论】:

  • 谢谢帕斯卡,我只是要发布这也有效:sudo sh -c 'echo $PATH'。我确实添加了 /etc/sudoers 的路径,一切正常。
  • 是的,sudo sh ... 也可以。我只是更喜欢sudo -s 的较短版本,更少输入:)