我的 $PATHS 在 osx 上来自哪里?

我的 $PATHS 在 osx 上来自哪里?

我知道这个问题有点重复,但我认为我的问题与我在这里发现的其他问题有点不同。

如果我回显 $PATH,我可以看到包含多条路径的常见字符串。好的。但我找不到它们真正写在哪里(至少不是全部):

在/私人/等/个人资料:

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
    [ -r /etc/bashrc ] && . /etc/bashrc
fi

/private/etc/paths:(从回显中我可以看到一些但不是全部!!!)

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

的〜/ .bash_profile

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

~/.bashrc

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting

而我目前没有任何 ~/.profile 文件。

我根本不是 Unix 专家。我无法理解所有路径从何而来,因此添加或修改的最佳位置在哪里。

您能给我建议吗?:)

答案1

来源掌握 MacOSX 的 path_helper 实用程序

旨在简化路径管理,path_helperLeopard 中引入的新工具可帮助管理PATH环境变量,但可能并未受到应有的欢迎,特别是因为它没有很好的文档记录。我们尝试对这个鲜为人知的工具进行一些介绍。

path_helper 位于/usr/libexec。就其本身而言,此工具是无害的,因为它不会更改您环境中的任何内容,它只是一个bashcsh命令生成器,用于根据位于 的一些文本文件 构建PATH和 环境变量。所以,试试吧!MANPATH/etc

超过一千个字,让我们运行它:

$ /usr/libexec/path_helper
PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/usr/local/apache-maven/apache-maven-2.0.9/bin"; export PATH
MANPATH="/usr/share/man:/usr/local/share/man:/usr/X11/man"; export MANPATH

它输出的命令不会被执行,除非你在 中调用相同的命令,eval就像在 中所做的那样/etc/profile,这是 shell 的默认启动脚本bash

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

但是,它如何构建这些路径?

  • path_helper实用程序读取目录中文件的内容/etc/paths.d/etc/manpaths.d并将其内容分别附加到PATHMANPATH环境变量。
  • 这些目录中的文件每行应包含一个路径元素。

在您的示例中,/private/etc/profile您有:

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

查看/etc/paths.d从该文件添加了哪些路径元素。

更多信息请参阅手册页

相关内容