在 CentOS 中将目录添加到 $PATH?

在 CentOS 中将目录添加到 $PATH?

我们刚刚启动了新服务器,并在所有服务器上运行 CentOS。成功安装 Ruby Enterprise Edition 后,我现在想添加 REE /bin(位于/usr/lib/ruby-enterprise/bin)目录,使其成为服务器上的默认 Ruby 解释器。

我已尝试以下操作,仅将其添加到当前 shell 会话:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

正确的做法是什么永久将此目录添加$PATH全部用户? 我目前以 身份登录root

答案1

编辑这样的内容不是一个好主意/etc/profile,因为每当 CentOS 发布此文件的更新时,你都会丢失所有更改。这正是这样做/etc/profile.d的目的:

echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
chmod +x /etc/profile.d/ree.sh

重新登录并享受(安全)更新$PATH

echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

which ruby
/usr/lib/ruby-enterprise/bin/ruby

您无需重新登录,而是可以重新加载配置文件:

. /etc/profile

这将更新$PATH变量。

答案2

按照 fmonk 的建议后,我查看了/etc/bashrc,发现上面写着“环境内容放在 /etc/profile 中”。我继续查看/etc/profile,看到了以下内容:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

为了解决我的问题,我只需pathmunge /usr/lib/ruby-enterprise/bin在 if 语句下方添加即可。这解决了我的问题。

答案3

抱歉,我误解了这个问题 以下答案针对的是用户的个人资料 留下它以防它能帮助别人

修改.bash_profile

nano ~/.bash_profile

然后在文件的某处添加/修改路径,并用以下分隔:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

然后重新加载你的个人资料

source ~/.bash_profile

或注销并重新登录

如果你检查 PATH 它应该包括你新添加的路径

echo $PATH

答案4

您可以在.rc 文件中设置环境变量;对于 bash shell(我相信是最常见的,也是 CentOS 中的默认设置),每个用户的主目录中都有一个名为 .bashrc 的文件。

将命令 PATH=/usr/lib/ruby-enterprise/bin:$PATH 添加到此文件,为任何一个特定用户进行设置。

要为所有用户设置它(如您所说),请在 /etc/bashrc 中更改它(每个用户主目录中的默认 .bashrc 应该源此文件,但您应该仔细检查)。

相关内容