Я получаю bashrc от нескольких моих друзей. Таким образом, я получаю повторяющиеся записи в моей переменной $ PATH. Я не уверен, является ли это проблемой для команд, которые долго запускаются. Как внутренне работает $ PATH в bash? Имеет ли больше PATHS замедление моего запуска?
45
zsh
, это так же просто, какtypeset -aU path
, FWIW .Ответы:
Наличие большего количества записей
$PATH
непосредственно не замедляет запуск, но замедляет каждый раз, когда вы впервые запускаете определенную команду в сеансе оболочки (не каждый раз, когда вы запускаете команду, потому что bash поддерживает кеш). Замедление редко ощущается, если у вас нет особенно медленной файловой системы (например, NFS, Samba или другой сетевой файловой системы или в Cygwin).Повторяющиеся записи также немного раздражают, когда вы просматриваете
$PATH
визуально, вам придется пробираться через все больше и больше лишних слов.Это достаточно просто, чтобы избежать добавления повторяющихся записей.
Примечание: поиск сценария оболочки другого пользователя означает выполнение написанного им кода. Другими словами, вы предоставляете своим друзьям доступ к своей учетной записи, когда они хотят.
Примечание:
.bashrc
это не то место, куда нужно устанавливать$PATH
или любую другую переменную окружения. Переменные среды должны быть установлены в~/.profile
. См. Какие установочные файлы следует использовать для настройки переменных среды с помощью bash? , Разница между .bashrc и .bash_profile .источник
case :$PATH:
и неcase $PATH
так, чтобы он совпадал, даже если запись первая или последняя.Я видел, как люди очищали дубликаты из своей переменной PATH, используя
awk
что-то вроде этого:Вы можете попробовать добавить это в свой собственный bashrc и убедиться, что вы куда-то добавили другие файлы перед запуском.
Альтернативы можно было бы использовать на
pathmerge
полезность.Что касается вашей проблемы со скоростью, это не повлияет на время запуска оболочки каким-либо существенным образом, но может сэкономить некоторое время при выполнении команды табуляции для команд, особенно когда команда не найдена в пути и она выполняет повторный поиск по той же самой папки ищут его.
Примечание о безопасности: Вы должны действительно прислушаться к предупреждениям Жиля о безопасности здесь. Получая доступ к файлу, принадлежащему другому пользователю, вы даете этим пользователям свободный проход для выполнения их собственного кода в качестве вашего пользователя при каждом запуске оболочки. Если вы не доверяете этим пользователям свой пароль, вам не следует искать их файлы оболочки.
источник
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}')
:
- это не только косметическая проблема. Это то же самое, что добавить.
к вашему пути, что потенциально опасно.Основываясь на ответе @Gilles, вы можете обернуть его в функцию, чтобы минимизировать ввод текста:
источник
Выполняется только первое совпадение
$PATH
, поэтому любые последующие записи не обрабатываются после этого. Вот почему вы должны иногда пересматривать порядок записей в вашей,$PATH
чтобы ваша среда работала так, как ожидалось.Чтобы ответить на ваш вопрос: это не должно быть причиной медленного запуска.
источник
TAB
? В этом случае вы должны проверить, выглядит ли ваше полное определениеcomplete -c which -a
. Вы должны удалить-a
параметр. Вы можете проверить , что с помощью команды:complete | grep which
.Чтобы предотвратить повторяющиеся записи в моем PATH, мне пришлось поместить в ОБА ~ ~. .Bash_profile и ~ / .bashrc следующее:
Основным недостатком является то, что он сортирует записи PATH, но я думаю, что я могу жить с этим.
источник