Простые вещи
PATH=$PATH:~/opt/bin
или же
PATH=~/opt/bin:$PATH
в зависимости от того, хотите ли вы добавить ~/opt/bin
в конце (для поиска после всех других каталогов, если есть программа с одинаковым именем в нескольких каталогах) или в начале (для поиска перед всеми другими каталогами).
Вы можете добавить несколько записей одновременно. PATH=$PATH:~/opt/bin:~/opt/node/bin
или вариации на заказ работают просто отлично. Не ставьте export
в начале строки, так как это связано с дополнительными сложностями (см. Ниже «Примечания к оболочкам, кроме bash»).
Если ваша система PATH
создается из множества различных компонентов, вы можете получить дублирующиеся записи. См. Как добавить путь к домашней директории, который будет обнаружен Unix, какой командой? и удалите дубликаты записей $ PATH с помощью команды awk, чтобы избежать добавления дубликатов или их удаления.
~/bin
Кстати, некоторые дистрибутивы автоматически помещают в ваш PATH, если он существует.
Где его поставить
Поместите линию , чтобы изменить PATH
в ~/.profile
, или , ~/.bash_profile
если это то, что у вас есть.
Обратите внимание, что ~/.bash_rc
не читается ни одной программой, и ~/.bashrc
является файлом конфигурации интерактивных экземпляров bash. Вы не должны определять переменные среды в ~/.bashrc
. Правильное место для определения переменных среды, таких как PATH
is ~/.profile
(или ~/.bash_profile
если вас не волнуют другие оболочки, кроме bash). Посмотрите, в чем разница между ними и какой я должен использовать?
Не помещайте это в /etc/environment
или ~/.pam_environment
: это не файлы оболочки, вы не можете использовать подстановки, как $PATH
там. В этих файлах вы можете только переопределить переменную, но не добавлять к ней.
Потенциальные осложнения в некоторых системных скриптах
Вам не нужно, export
если переменная уже находится в среде: любое изменение значения переменной отражается в среде. PATH
¹ в значительной степени всегда в среде; все системы Unix устанавливают его очень рано (обычно в самом первом процессе).
Во время входа в систему вы можете полагаться на то, PATH
что уже находитесь в среде и уже содержат некоторые системные каталоги. Если вы пишете сценарий , который может быть выполнен в начале при установке какой - то виртуальной среде, необходимо убедиться , что PATH
не является пустым и экспортируется: если PATH
до сих пор не установлено, то что - то вроде PATH=$PATH:/some/directory
бы установлен PATH
на :/some/directory
, а пустой компонент в начале означает текущий каталог (как .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Примечания о снарядах, кроме Баш
В bash, ksh и zsh, export
есть специальный синтаксис, и то и другое PATH=~/opt/bin:$PATH
и export PATH=~/opt/bin:$PATH
делают правильные вещи даже. В других оболочках в стиле Bourne / POSIX, таких как dash (который есть /bin/sh
во многих системах), export
анализируется как обычная команда, что подразумевает два различия:
Таким образом, в таких оболочках, как dash, export PATH=~/opt/bin:$PATH
устанавливается PATH
литеральная строка, ~/opt/bin/:
за которой следует значение PATH
до первого пробела.
PATH=~/opt/bin:$PATH
(голое задание) не требует кавычек и делает правильные вещи. Если вы хотите использовать export
в переносимом скрипте, вам нужно написать export PATH="$HOME/opt/bin:$PATH"
или PATH=~/opt/bin:$PATH; export PATH
(или PATH=$HOME/opt/bin:$PATH; export PATH
для переносимости даже в оболочку Bourne, которая не принимала export var=value
и не выполняла расширение тильды).
¹ Это было не так в оболочках Bourne (как в реальной оболочке Bourne, а не в современных оболочках в стиле POSIX), но в наши дни вы вряд ли встретите такие старые оболочки.