为什么我的 .bash_profile 显示重复的条目?

为什么我的 .bash_profile 显示重复的条目?

因此,我一直在尝试对我的 mac OS .bash_profile 进行各种清理(遇到了一些问题),现在当我echo $PATH在终端上执行此操作时,我得到了以下信息:

/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home :/usr/local/sbin :/usr/local/sbin :/usr/local/sbin :/usr/local/bin :/usr/bin :/bin :/usr/sbin :/sbin :/Users/herrmartell/bin :/usr/local/bin/mysql/bin :/Users/herrmartell/bin :/usr/local/bin/mysql/bin :/Users/herrmartell/bin :/usr/local/bin/mysql/bin

如您所见,重复条目的数量相当多。这很奇怪,因为我的 .bash_profile 如下所示:

export PATH=$PATH:$HOME/bin export PATH="/usr/local/sbin:$PATH" export MYSQL_PATH="/usr/local/bin/mysql" export PATH=$PATH:$MYSQL_PATH/bin export JAVA_HOME="/path/is/too/long/sorry" export PATH=${JAVA_HOME}:$PATH

我尝试寻找可能覆盖我的另一个 .bash_profile/.bash*/.profile 文件,但没有找到,而且我对这个文件所做的更改也反映在我的echo $PATH结果中。

发现了一些相关的东西,但它是在 Ubuntu 上,说实话我迷路了:为什么我的 $PATH 中会出现重复的条目?,然后是一些有关 Unix 的内容(我也不明白,抱歉):$PATH 中的重复条目有问题吗?

到目前为止,它还没有给我带来问题,但我希望将来能避免再遇到此类问题。

那么我的文件出了什么问题?谢谢。

答案1

如果你还没有,请尝试检查以下路径

cat ~/.bashrc
cat ~/.profile
cat ~/.bash_profile
cat /etc/bashrc
cat /etc/profile
cat /etc/bash_profile

您也可以尝试

find ~ -type f -size -30k -exec grep -H herrmartell {} \;
find /etc -type f -size -30k -exec grep -H herrmartell {} \;

答案2

2020 年更新:除了与(备受诟病的)bashshell 关联的路径之外,较新版本的 MacOS 还使用zsh作为默认 shell,并且可能会添加(按顺序):

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

虽然以前bash文件是有条件地获取的(结果是有些用户无法添加他们的路径),但现在所有这些zsh文件(如果存在)都是获取的(结果是有些用户发现添加了太多路径)。

此外,我还在以下地方发现了路径:

private/etc/bashrc_Apple_Terminal
private/etc/zshrc_Apple_Terminal
private/etc/manpaths
private/etc/paths  # this one was the killer for me!
private/etc/paths~orig 
private/etc/paths.save # probably not sourced
private/etc/paths~save1 # probably not sourced
private/etc/manpaths.d/
private/etc/paths.d/

其他地方肯定还有更多路径,但对我来说,这private/etc/paths是许多重复的根源。如果读到这篇文章的人发现更多地方,请通知我添加它们!

答案3

今天我遇到了类似的问题,偶然看到了这篇文章。我找到了一个替代解决方案。与其寻找重复源发生的位置,不如在修改 $PATH 值之前检查它。例如,

export PATH="$PATH:$HOME/.local/bin:$HOME/bin"

做这个:

if ! [[ "$PATH" =~ ":$HOME/.local/bin:$HOME/bin" ]]
then
    PATH="$PATH:$HOME/.local/bin:$HOME/bin"
fi    
export PATH

相关内容