我的$ PATH变量是如何在macOS上构建的?


6

我最近在我的Mac上安装了Homebrew,它抱怨在我的变量/usr/bin之前发生,这意味着将使用系统提供的程序而不是使用Homebrew安装的程序。/usr/local/bin$PATH

.bashrc根据此截屏视频,我在一组单独的文件中配置。这意味着~/.bash_profile看起来像这样:

if [ -f ~/.bashrc ];
then
  source ~/.bashrc
fi

~/.bashrc 看起来像这样:

source ~/bin/dotfiles/bashrc

并且~/bin/dotfiles/bashrc看起来是这样的:

. ~/bin/dotfiles/bash/env
. ~/bin/dotfiles/bash/config
. ~/bin/dotfiles/bash/aliases

~/bin/dotfiles/bash/env,这是我设置我的$PATH变量,看起来像这样:

export EDITOR="kom"
export PATH=some/path/at/start:usr/local/bin:/Users/jim/pear/bin:~/bin:/Users/jim/.gem/ruby/1.8/bin:/Users/jim/bin/bashscripts:some/path/at/end:$PATH

我已添加some/path/at/startsome/path/at/end用于调试目的,因为当我尝试时,echo $PATH我得到这个:

/opt/local/bin:/opt/local/sbin:/Users/jim/bin:/opt/local/bin:/opt/local/sbin:some/path/at/start:usr/local/bin:/Users/jim/pear/bin:/Users/jim/bin:/Users/jim/.gem/ruby/1.8/bin:/Users/jim/bin/bashscripts:some/path/at/end:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

也就是说,在我上面概述的配置中,有一些其他东西被加载到$ PATH变量中,我无法控制。关于这些东西从哪里加载的任何想法,以便我可以去改变它并移动/usr/local/bin之前/usr/bin

Answers:


2

如果您修复PATH分配中的拼写错误并usr/local/bin/usr/local/binHomebrew 替换应该停止抱怨。

其他的东西(/opt/local/...)在shell初始化期间(意味着之后source ~/.bashrc或之后. ~/bin/dotfiles/bash/env)明确地添加到某处。您将不得不查看不同的文件(或grep for /opt/localPATH.*PATH)以查看它发生的位置(以及原因)。


谢谢patrix,修复它。我还发现了semioticpixels.com/crib-notes / ...,它描述了$ PATH是如何构建的(虽然在Lion中)
Jim

3

bash手册页的INVOCATION部分说

当bash作为交互式登录shell或作为具有--login选项的非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。在读取该文件之后,它按顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个命令中读取并执行命令。

特别感兴趣的是/etc/profile,它用于path_helper根据它在/etc/paths和中发现的路径构建路径/etc/paths.d/*


1

还有系统范围的bashrc,可以在/ etc / bashrc找到,还有其他几个。

来自man bash: -

FILES
       /bin/bash
              The bash executable
       /etc/profile
              The systemwide initialization file, executed for login shells
       ~/.bash_profile
              The personal initialization file, executed for login shells
       ~/.bashrc
              The individual per-interactive-shell startup file
       ~/.bash_logout
              The individual login shell cleanup file, executed when a login shell exits
       ~/.inputrc
              Individual readline initialization file
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.