Some people suggest exporting PATH
only in .bash_profile
instead of in .bashrc
(for Bash).
The helps but does not resolve the issue of possible duplicated paths in $PATH
.
The right way is to check for existence of the path in the $PATH
environment variable first,
and add it only when it does NOT already exist in $PATH
.
Below is an example snippet of adding paths into the environment variable $PATH
.
# set $PATH
_PATHS=(
$(ls -d $HOME/*/bin 2> /dev/null)
$(ls -d $HOME/.*/bin 2> /dev/null)
$(ls -d $HOME/Library/Python/3.*/bin 2> /dev/null)
$(ls -d /usr/local/*/bin 2> /dev/null)
$(ls -d /opt/*/bin 2> /dev/null)
)
for ((_i=${#_PATHS[@]}-1; _i>=0; _i--)); do
_PATH=${_PATHS[$_i]}
if [[ -d $_PATH && ! "$PATH" =~ (^$_PATH:)|(:$_PATH:)|(:$_PATH$) ]]; then
export PATH=$_PATH:$PATH
fi
done
The snippet has the advatage that it works well in both .bashrc
and .bash_profile
.
So,
you can safely add such snippets into .bashrc
and keep your .bash_profile
as simple as the following.
if [[ -f ~/.bashrc ]]; then
. ~/.bashrc
fi