Как удалить дубликаты папок из $ PATH?

2

В некоторых окнах моего терминала у меня есть повторяющиеся записи в PATH переменная; что-то вроде этого:

PATH=/a/b:/c/d:/a/b:/c/d:/e/f:/a/b

Я полагаю, что в некоторых моих сценариях виноваты такие строки:

PATH=/a/b:$PATH

После поиска этого и того и этого снова PATH становится очень долго Это вопрос:

Есть ли bash команда для очистки PATH и подобные переменные env? Это должно быть bash сценарий, потому что нельзя выполнить утилиту и ожидать, что она изменит среду вызывающей оболочки.

В приведенном выше примере очищен PATH должен выглядеть так:

PATH=/a/b:/c/d:/e/f
Michael
источник

Ответы:

5

Лучше не создавать дубликаты, чем пытаться удалить их потом. Этого легко избежать с помощью техники, которую я использую в своем .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 команда.

AFH
источник
0

Microsoft Technet решает эту проблему с скрипт powershell , Этот скрипт идентифицирует и удаляет повторяющиеся записи из PATH переменная.

Это говорит:

Иногда повторная установка программного обеспечения может добавить повторяющиеся записи в переменную среды PATH. Поскольку переменная окружения имеет жесткое ограничение размера этой переменной, есть вероятность, что вы можете ограничить ее в течение определенного периода времени. Этот скрипт проверяет переменную среды PATH и удаляет все повторяющиеся записи пути.

Sandeep
источник