Я часто изменяю свой .bashrc и затем поставляю его. Однако, когда у меня есть что-то вроде
export PATH="~/bin:~/perl5/bin:$PATH"
моего файла, PATH
переменная окружения увеличивается каждый раз, когда я получаю исходный файл.
Например, при первом обращении к источнику .bashrc PATH
переменная состоит из ~/bin:~/perl5/bin:/usr/bin:/bin
.
Второй раз он состоит из ~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin
.
В третий раз он состоит из ~/bin:~/perl5/bin:~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin
.
Есть ли простой способ сделать так, чтобы он добавлял только то, чего еще нет в PATH?
/etc/profile
Debian Lenny, поэтому я включаю его в свой.bashrc
.pathmunge /some/path
разместится/some/path
в начале$PATH
иpathmunge /some/path after
будет/some/path
в конце$PATH
if ! [[ $PATH =~ (^|:)$1($|:) ]] ; then
.pathmunge /foo before
не достигает этого Лучшим способом было бы добавить / foo в начале, а затем удалить дубликаты.У меня была эта проблема, поэтому я использовал комбинацию методов, перечисленных в вопросе StackOverflow . Ниже приведено то, что я использовал для дедупликации фактической переменной PATH, которая уже была установлена, поскольку я не хотел изменять базовый скрипт.
Вы всегда можете оптимизировать это немного больше, но у меня был дополнительный код в моем оригинале, чтобы показать, что происходит, чтобы убедиться, что он правильно устанавливает переменные. Еще одна вещь, которую стоит отметить, это то, что я выполняю следующее
Это сделано для того, чтобы я мог обрабатывать каталоги с пробелами (в домашних каталогах Samba с именами пользователей Active Directory могут быть пробелы!)
источник
/bin
если есть другие записи, например,/usr/bin
потому что регулярное выражение совпадает, даже если эти две записи не совпадают!Установите ваш путь явно.
источник
PATH
не всегда одинаково.Только одна строка:
источник
$PATH
. Мне нравится помещать определенные каталоги в начале$PATH
(например/home/username
), чтобы мои личные копии исполняемых файлов запускались вместо встроенных по умолчанию.Я могу думать о двух разных способах решения этой проблемы. Первый - запустить ваш .bashrc со строки, которая явно устанавливает ваш базовый PATH. Таким образом, каждый раз, когда вы его создаете, он сбрасывается в базовый перед добавлением дополнительных каталогов.
Например, добавьте:
Кроме того, вы можете проверить элемент, прежде чем добавить его в путь. Чтобы сделать это, вы должны использовать что-то вроде:
Последнее, однако, имеет тенденцию становиться немного повторяющимся, если вы добавляете много записей, поэтому я склонен придерживаться первого. Если вы хотите использовать это и планируете добавить много записей, было бы разумно написать функцию bash для ее обработки.
Примечание: второй вариант может работать только так, как написано в современных версиях bash. Поддержка регулярных выражений не является функцией Bourne Shell (/ bin / sh) и может отсутствовать в других оболочках. Кроме того, использование кавычек может не потребоваться или может даже вызвать проблемы в некоторых новейших версиях bash.
источник
PATH
не всегда одинаково.if
. Кроме того, на удивление (для меня) легко превратить это в функцию, которая перебирает аргументы, разделенные пробелами, поэтому вы можете просто сказать:add_to_PATH ~/perl5/bin ~/.bin
unix.stackexchange.com/a/4973/28760 (я думаю, чтоcase
используемое здесь утверждение более переносимо , но твойif
мне понятнее). РЕДАКТИРОВАТЬ странное совпадение, что этот вопрос также добавляет Perl5!Вот мое решение:
PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: '!x[$0]++' | sed "s/\(.*\).\{1\}/\1/")
Хороший легкий лайнер, который не оставляет следов:
источник