Prune duplicate entries from PATH variable
Use the pathmunge() function available in most distro's /etc/profile
:
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}
edit: For zsh
users, typeset -U <variable_name>
will deduplicate path entries.
I was having this issue so I used a combination of techniques listed on StackOverflow question. The following is what I used to dedupe the actual PATH variable that had already been set, since I didn't want to modify the base script.
tmppath=(${PATH// /@})
array=(${tmppath//:/ })
for i in "${array[@]//@/ }"
do
if ! [[ $PATH_NEW =~ "$i" ]]; then
PATH_NEW="${PATH_NEW}$i:";
fi
done;
PATH="${PATH_NEW%:}"
export PATH
unset PATH_NEW
You could always optimize this a bit more, but I had extra code in my original to display what was happening to ensure that it was correctly setting the variables. The other thing to note is that I perform the following
- replace any SPACE character with an @ character
- split the array
- loop through the array
- replace any @ characters in the element string with a space
This is to ensure that I can handle directories with spaces in (Samba home directories with Active Directory usernames can have spaces!)
Set your path explicitly.