Mac OS X 中 .bash_profile 和 .profile 明显冲突

Mac OS X 中 .bash_profile 和 .profile 明显冲突

我遇到一个问题,当我加载新的终端窗口时,我必须获取源代码~/.profile才能使我的 PHP 路径正常工作。

本质上,我的问题是让终端使用 MAMP PHP 和 MySQL 而不是默认的。

我已经规划好了路径,但每次打开新窗口时,我都必须使用命令

source ~/.profile

是否有原因导致 Mac OS X 无法注册/获取/[在此处插入正确术语] .profile?我读到过.bash_profile将覆盖,但 PHP 路径也在.profile中定义。.bash_profile

以下是每个文件的内容。

内容.bash_profile

export PATH="$PATH:/Users/[username]/bin:/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql"

内容.profile

export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_PHP:$PATH"

答案1

我相信,当您将所设置的.bash_profile(不起作用)与.profile(起作用)的逻辑顺序进行比较时,答案就很清楚了。

这是你的.bash_profile

export PATH="$PATH:/Users/[username]/bin:/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql"

这是你的.profile

export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_PHP:$PATH"

解决这个问题的关键是查看与默认值相比,您设置的新 MAMP 相关项目的位置$PATH;顺序很重要,因为 shell 将对其采取行动(关键事项)它在用户搜索路径列表中找到的第一个项目

知道你可以分解你所看到的行为如下:

  • .profile您设置$MAMP_PHP为变量的版本中,然后前置它到开始$PATH
  • 但在.bash_profile版本中你是追加这东西 $PATH:/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql

因此,我将.bash_profile像这样重新设计以使其发挥作用:

export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_PHP:$PATH:/Users/[username]/bin"

请注意我是如何使用$MAMP_PHP约定的.profile——这是一种在逻辑上为人眼分离路径的好方法——以及我如何简单地将该值设置为,/Applications/MAMP/bin/php/php5.5.14/bin因为我不知道何时会使用这个 MySQL 路径:/Applications/MAMP/bin/mysql

从我使用 MAMP 版本 2.1.3 的角度来看,我没有mysql在您设置的路径中看到实际的二进制文件。传统上,它会/Applications/MAMP/Library/bin/与其他 MAMP 核心二进制文件一起位于目录中。所以也许您.bash_profile应该像这样调整:

export MAMP_BIN=/Applications/MAMP/Library/bin
export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_BIN:$MAMP_PHP:$PATH:/Users/[username]/bin"

此外,这/Users/[username]/bin对我来说似乎有点笨拙和过于具体。如果您要维护特定于用户目录的目录,~/bin您可能只想将其设置为~/bin如下形式:

export MAMP_BIN=/Applications/MAMP/Library/bin
export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_BIN:$MAMP_PHP:$PATH":~/bin

"请注意,最后一部分没有双引号 ( ) :~/bin;这样可以~/正确扩展到用户的主目录。这样,您就可以.bash_profile在用户拥有目录的任何用户帐户上干净地使用这样的设置~/bin

答案2

Bash 在您的主目录中按顺序查找.bash_profile.bash_login和。然后 bash 将运行它找到的第一个文件并停止查找。.profile

因此,对于您来说,一个解决方案可以是.profile在您的 末尾获取您的.bash_profile,或者更简单地,在您.profile的 末尾复制两行.bash_profile

答案3

Unix 常见问题解答 (适用于 OS X)我们可以读到:

Bash 启动文件

当“登录 shell”启动时,它会读取文件“/etc/profile”,然后读取“~/.bash_profile”或“~/.bash_login”或“~/.profile”(无论哪一个存在 - 它只读取其中一个,按照所述顺序检查它们)。

当“非登录 shell”启动时,它会读取文件“/etc/bashrc”,然后读取文件“~/.bashrc”。

请注意,当使用名称“sh”调用 bash 时,它会尝试模仿 Bourne shell(“sh”)的启动顺序。具体来说,默认情况下,以“sh”调用的非登录 shell 不会读取任何点文件。详细信息请参阅 bash 手册页。

因此,如果您已经~/.bash_profile,该文件~/.profile将不会被 bash 自动读取,因此您可以在中添加以下几行~/.bash_profile来加载它:

# Load user profile file
if [ -f ~/.profile ]; then
  . ~/.profile
fi

相关内容