Лучше не создавать дубликаты, чем пытаться удалить их потом. Этого легко избежать, используя технику, которую я использую в своем .bashrc
для добавления моего личного каталога bin/
:
[ "${PATH#*$HOME/bin:}" == "$PATH" ] && export PATH="$HOME/bin:$PATH"
Я сделал это в то время, когда делал обновления для .bashrc
и я хотел перезапустить его без перезапуска оболочки.
Если вы хотите добавить каталог в конец $PATH
вам нужно использовать начальное двоеточие:
[ "${PATH#*:$HOME/bin}" == "$PATH" ] && export PATH="$PATH:$HOME/bin"
Вы можете использовать раскрытие параметров, чтобы пройти через PATH
и удалить дубликаты, но это будет немного сложно, и вам нужно будет решить, какую позицию следует сохранить. Что-то вроде:
OLDPATH="$PATH"; NEWPATH=""; colon=""
while [ "${OLDPATH#*:}" != "$OLDPATH" ]
do entry="${OLDPATH%%:*}"; search=":${OLDPATH#*:}:"
[ "${search#*:$entry:}" == "$search" ] && NEWPATH="$NEWPATH$colon$entry" && colon=:
OLDPATH="${OLDPATH#*:}"
done
NEWPATH="$NEWPATH:$OLDPATH"
export PATH="$NEWPATH"
После того, как я написал это на лету и проверил, я должен был удалить большинство ошибок, и это должно быть адекватным руководством к тому, что вам нужно будет сделать. Это оставляет последнее вхождение любых дубликатов, где они были бы, если бы вы использовали мой сценарий, чтобы избежать дубликатов в первую очередь. В сценарии его, конечно, нужно вызывать с помощью .
/source
команда.