Простые вещи
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. Правильное место для определения переменных среды, таких как PATHis ~/.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), но в наши дни вы вряд ли встретите такие старые оболочки.