Linux: remova caminhos redundantes da variável $ PATH
O Linux From Scratch possui esta função em / etc / profile
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
Isso deve ser usado com essas funções para adicionar ao caminho, para que você não faça isso de forma redundante:
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
O uso simples é fornecer apenas pathremove
o caminho do diretório a ser removido - mas lembre-se de que ele deve corresponder exatamente:
$ pathremove /home/username/anaconda3/bin
Isso removerá cada instância desse diretório do seu caminho.
Se você deseja que o diretório esteja no seu caminho, mas sem as redundâncias, você pode apenas usar uma das outras funções, por exemplo - para o seu caso específico:
$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games
Mas, a menos que a legibilidade seja a preocupação, neste momento é melhor você apenas fazer:
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Isso funcionaria em todas as conchas conhecidas pelo homem?
Eu presumo que o acima para o trabalho na sh
, dash
e, bash
pelo menos. Eu ficaria surpreso ao saber que não funciona csh
,fish', or
ksh`. Duvido que funcionaria no shell de comando do Windows ou no Powershell.
Se você possui o Python, o seguinte tipo de comando deve fazer o que é solicitado diretamente (ou seja, remover caminhos redundantes):
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )
Um one-liner (para evitar problemas de múltiplas linhas):
$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )
O acima remove os caminhos redundantes posteriores. Para remover caminhos redundantes anteriores, use o índice de uma lista invertida e inverta-o novamente:
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )