Não é uma resposta exata, mas possivelmente útil para outras pessoas que têm problemas de duplicação
A partir da resposta de aceitação recebida do Stack Overflow: Como manipulo elementos $ PATH em scripts de shell? desenvolveu um conjunto de ferramentas ligeiramente grande. A maior parte do crédito aqui deve ir para Jonathan Leffler que forneceu o modelo que eu usei para escrevê-los.
Adicionar sem duplicar
# Insure that a path element exists by adding it to the end if it does not
#
# $1 name of the shell variable to set (e.g. PATH)
# $3 the path element that we want to insure exists
function insure_path () {
local path=$1
local list=$(eval echo '$'$path)
local pat=$2
checkstr=$(echo "$list" | tr ":" "\n" | grep -Fm 1 "$pat")
if [ "$checkstr" ]
then
true
else
export $path=$(echo $list:$pat | sed -e 's|\(:\):*||g' -e 's|:$||' -e'
s|^:||')
fi
}
# Insure that a path element exists by adding it to the front if it does not
#
# $1 name of the shell variable to set (e.g. PATH)
# $2 the path element that we want to insure exists
function insure_path_front () {
local path=$1
local list=$(eval echo '$'$path)
local pat=$2
checkstr=$(echo "$list" | tr ":" "\n" | grep -Fm 1 "$pat")
if [ $checkstr ]
then
true
else
export $path=$(echo $pat:$list | sed -e 's|\(:\):*||g' -e 's|:$||' -e'
s|^:||')
fi
}
Remover duplicados existentes
# Remove duplicates from a path. Preferes the ealiest instance of each
# duplicate because this preserves the semantics of the existing path
#
# $1 name of the shell variable to set (e.g. PATH)
function unduplicate_path () {
local path=$1
local list=$(eval echo '$'$path)
local split_list=$(echo "$list" | tr ":" " ")
local tempp=""
# Build the new version of $path from scrath
for p in $split_list
do
insure_path_back tempp $p
done
# Now replace the existing version
export $path=$tempp
}