Регулярным способом добавить каталог для СОЕДИНЕНИЯ КАНАЛОМ:
PATH=$PATH:/new-directory
Теперь проблема состоит в том, если Вы добавите новый каталог к ПУТИ затем, то будет добавлено, не проверяя, находится ли это уже в ПУТИ или нет.
Например:
echo $PATH
дает:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Теперь, если я добавляю /usr/bin
:
PATH=$PATH:/usr/bin
Затем ПУТЬ становится:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/bin
Так, если можно заметить, теперь /usr/bin
повторяется.
Так, как я могу добавить новый каталог к ПУТИ без повторения?
Короткий путь состоит в том, чтобы использовать:
[[ ":$PATH:" =~ ":/new-directory:" ]] || PATH="/new-directory:$PATH"
Объяснения:
[[
условная команда, для теста. =~
возврат бинарного оператора 0, если строка справа, которую считают расширенным регулярным выражением, соответствует строке слева, и 1 иначе. /new-directory
, был не найдены в ПУТИ), благодаря ||
логичный ИЛИ оператор управления, вторая команда выполняется: PATH="/new-directory:$PATH"
. Наблюдения:
PATH="/new-directory:$PATH"
. PATH="/new-directory:$PATH"
. Это, потому что каталоги в начале ПУТИ имеют приоритет по тем, которые приезжают позже. Можно использовать эту команду:
if [[ ":$PATH:" != *":/new-directory:"* ]]; then PATH=${PATH}:/new-directory; fi
Теперь для примера выше:
echo $PATH
дает:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Теперь, если я хочу добавить/usr/bin:
if [[ ":$PATH:" != *":/usr/bin:"* ]]; then PATH=${PATH}:/usr/bin; fi
можно заметить, что ПУТЬ не изменяется:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
теперь для добавления другого примера/var/www
if [[ ":$PATH:" != *":/var/www:"* ]]; then PATH=${PATH}:/var/www; fi
каталога Тогда вывод echo $PATH
дает:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/www
Я использую bash_path_funcs Stephen Collyer, описанный в Журнале Linux путь назад в 2000:
http://www2.linuxjournal.com/lj-issues/issue71/3645.html
http://www2.linuxjournal.com/lj-issues/issue72/3768.html
http://www2.linuxjournal.com/lj-issues/issue73/3935.html
Эти addpath
функция добавляет запись в путь, только если это не там во-первых. delpath -n
удаляет все несуществующие каталоги из пути.
Мое плохое, я использовал ссылки в своем ответе, но ссылки сделали то, что они всегда делают - они ушли. Можно добраться pathfunc.tgz
файл от https://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz