Я хочу добавить в ~ / .bashrc несколько каталогов к моему $ PATH.
Мой $ PATH довольно длинный, поэтому трудно понять, какие каталоги он содержит и в каком порядке.
Я знаю, что могу изменить мой ~ / .bashrc так:
PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
было бы легче читать. Но мне было интересно, если в последние годы Bash приобрел некоторый синтаксис, который облегчает определение длинного PATH. Например, я фантазирую о синтаксисе, похожем на:
PATH=:((
/some/dir
/another/dir
/yet/another
/and/another
...
))
Я знаю, что такой синтаксис недействителен. Мне было интересно, если есть что-то так просто. Есть?
PATH=foo:$PATH
кажется неправильным , потому что удержать рост каждый раз ,source ~/.bashrc
и дажеexec bash
не может помочь , так как$PATH
этоexport
.Ответы:
Я использую набор вспомогательных функций для добавления или добавления пути к переменной. Функции входят в дистрибутивный пакет для Bash в файле contrib под названием «pathfuncs».
Если вы укажете переменную в качестве второго аргумента, она будет использовать ее вместо PATH.
Для удобства вот они:
Если вы добавите их в свой загрузочный файл bash, вы можете добавить их в PATH, например:
Или укажите другую переменную:
Я использую этот метод в моих файлах rc, ставя сначала pre_paths, а затем add_paths. Это делает все мои изменения пути легко понятными с первого взгляда. Еще одним преимуществом является то, что строки достаточно короткие, чтобы при необходимости я мог добавить заключительный комментарий к строке.
А так как это функции, вы можете использовать их в интерактивном режиме из командной строки, например,
add_path $(pwd)
добавив текущий каталог в путь.источник
del_path .
).Хорошо, я разобрался со следующим решением, которое я считаю элегантным (с точки зрения синтаксиса оболочки). Он использует синтаксис массива Bash, а также удобный способ объединения элементов:
ALERT!
Оказывается, у этого решения есть проблема : в отличие от решений @terdon и @Starfish, он сначала не проверяет, есть ли пути в PATH. Итак, поскольку я хочу поместить этот код в ~ / .bashrc (а не в ~ / .profile), повторяющиеся пути будут ползти в PATH. Так что не используйте это решение (если только вы не поместите его в ~ / .profile (или, лучше, ~ / .bash_profile, так как он имеет специальный синтаксис Bash)).
источник
PATH
вызвать проблемы с производительностью (особенно если оболочка кэширует успешные поиски).Я использую функцию ниже в моем
~/.bashrc
. Это то, что я получил от сисадмина в моей старой лаборатории, но я не думаю, что он их написал. Просто добавьте эти строки в ваш~/.profile
или~/.bashrc
:Это имеет различные преимущества:
$PATH
тривиальна:pathmunge /foo/bar
;pathmunge /foo/bar
или конец (pathmunge /foo/bar
после)$PATH
.Файл инициализации вашей оболочки будет содержать что-то вроде:
источник
grep
.eval
так что вы можете нанести серьезный ущерб, если запустите его с неверным аргументом.grep
, см bugzilla.redhat.com/show_bug.cgi?id=544652#c7Я хочу добавить в ~ / .bashrc несколько каталогов к моему $ PATH.
Я использую следующее в Cygwin. Должно работать в других версиях bash. Вы можете удалить,
unset PATH
чтобы использовать свой текущийPATH
(если вы сделаете это, вам, возможно, придется выяснить, как добавить:
разделители).Заметка:
bash
функции, но потерял ее после сбоя диска.По моему
.bash_profile
:...
В
~/.path_elements
:источник
Я использую это в моем .bashrc (а также в моем .zshrc, так как я обычно использую zsh там, где он доступен вместо bash). Конечно, это требует от меня добавления каталогов вручную, но преимущество заключается в том, что при обновлении я могу продолжать копировать его на новые серверы и не беспокоиться о PATH на новом сервере, который создается с каталогами, которых там нет.
Я делаю то же самое для моего MANPATH:
В дополнение к наличию единственного файла, который я могу копировать в системы в разнородных средах, не опасаясь добавления несуществующих каталогов в PATH, этот подход также имеет то преимущество, что позволяет мне указать порядок, в котором я хочу, чтобы каталоги появлялись в PATH. Так как первая строка каждого определения полностью переопределяет переменную PATH, я могу обновить мой .bashrc и получить его после редактирования, чтобы обновить оболочку, не добавляя дублирующиеся записи (с которыми я сталкивался давным-давно, когда просто начинал с " $ PATH = $ PATH: / new / dir ". Это гарантирует, что я получу чистую копию в нужном мне порядке.
источник
d="/usr/share/man" ; [ -d "$d" ] && MANPATH="$MANPATH:${d}"
будет проще и проще добавить новый каталог (просто скопируйте строку и отредактируйте первую часть "d = ...."). Тем не менее, для PATH, я думаю, вы получите слишком много директорий в PATH, что не всегда хорошо (что если какая-то команда «foo» существует в одном из менее известных путей, и вы делаете что-то совершенно другое) то, что ожидают обычные пользователи?)Есть простой способ! Прочитайте функции оболочки и переменные пути в Linux Journal , 01 марта 2000 г. Стивен Коллайер
Функции позволяют мне использовать новый тип данных в моей среде bash - список, разделенный двоеточиями. В дополнение к PATH я использую их для настройки моих LOCATE_PATH, MANPATH и других, а также в качестве общего типа данных в программировании bash. Вот как я настроил свой PATH (используя функции):
Поскольку ссылка на журнал Linux называется «неработающей», я поместил функции пути Bash в файл .shar по адресу http://pastebin.ubuntu.com/13299528/.
источник