因此,我一直在尝试对我的 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 年更新:除了与(备受诟病的)bash
shell 关联的路径之外,较新版本的 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