0

我从我的 mac 上的站点安装了 GIT,但是 git --version 给了我旧的安装(我猜是 xcode 安装)。所以我解决了这样做:

  • 创建一个 ~/.bash_profile 文件
  • 写:

    导出 PATH=/usr/local/bin:$PATH

  • 重启终端

不过,我认为我的配置中有一些东西可以更好地设置。

我当前的回声 $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin

所以它可以工作,但它很乱,因为我有 2 /usr/local/bin 和 /usr/local/git/bin

另外,我不明白为什么它现在可以工作,因为 /usr/local/bin 只包含 bbedit 命令:

  • bbdiff
  • 编辑
  • bbfind

我不太清楚所有路径配置文件以及它们被读取的真实顺序。我只知道一些 unix 命令。我在 ~/ 中的当前文件是:

〜/ .profile:

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

〜/ bashrc:

. ~/bin/dotfiles/bashrc

然后在 . ~/bin/dotfiles/bashrc

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

并且在 . ~/bin/dotfiles/bash/env:

export PATH=/usr/local/bin:/opt/local/bin:/opt/local/sbin:$PATH

. ~/bin/dotfiles/bash/config 只是空的

和 。~/bin/dotfiles/bash/aliases 包含一些别名逗号。

无论如何,它应该已经读取了 ~/bin/dotfiles/bash/env,但它没有。或者它只在 /etc/paths 之后读取它

~/.bash_profile 首先被读取。

我当前的 /etc/paths 内容:

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

谁能解释一下这些机制?:P 或者也许我应该将这个问题发布到某个 Unix 组?

4

2 回答 2

2

当您在 *NIX shell 上键入任何命令时,shell 会尝试使用$PATH. 假设您的路径是/usr/bin:/usr/local/bin,那么会发生这种情况:

$ foo
- Does /usr/bin/foo exist? No.
- Does /usr/local/bin/foo exist? No.
- Does foo exist in the current working directory?

换句话说,它$PATH依次查看每个元素并尝试在那里找到您要求的可执行文件。这就是典型的 -- 过程以 , 开头的原因configuremakemake install明确./configure表明您要在当前目录configure中运行可执行文件,而不是某些系统范围的命令。

要弄清楚它foo最终实际选择的是哪个,请运行:

$ which foo

您可以通过提供其完整路径来显式运行任何命令:

$ /usr/local/bin/foo  # overrides /usr/bin/foo, should it exist

初始化脚本中的export PATH=...:$PATH指令只是将某些路径添加到您的路径之前,允许您覆盖解析命令命令的优先级。在那里两次并不理想/usr/local/bin,但这也不是一个真正的问题。你应该注意不要让你的路径变得太长,因为这可能会导致对每个命令进行大量查找,并且也可能会搞砸你的脑袋。

于 2013-03-02T12:18:41.063 回答
0

有关bash 配置文件加载顺序的全面演练,请参阅此内容。

于 2013-03-02T12:27:54.830 回答