Переменная path в linux. Переменные окружения в Linux

export PATH=~/opt/bin:$PATH

Export PATH=$PATH:~/opt/bin

9 Solutions collect form web for “Как правильно добавить путь к PATH?”

Простые вещи

PATH=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

в зависимости от того, хотите ли вы добавить ~/opt/bin в конце (для поиска по всем другим каталогам, если есть программа с тем же именем в нескольких каталогах) или в начале (для поиска перед всеми другими каталогами).

Вы можете добавить несколько записей одновременно. PATH=$PATH:~/opt/bin:~/opt/node/bin или изменения в порядке упорядочения просто отлично.

Вам не нужно export если переменная уже находится в среде: любое изменение значения переменной отражается в среде PATH почти всегда находится в среде; все системы unix устанавливают его очень рано (обычно в самом первом процессе, по сути).

Если ваш PATH будет построен в разных компонентах, вы можете получить дубликаты записей. См. Как добавить путь к исходному каталогу, который будет обнаружен Unix, какая команда? и удалите повторяющиеся записи $ PATH с помощью команды awk, чтобы избежать добавления дубликатов или их удаления.

Где поставить

Обратите внимание, что ~/.bash_rc не читается какой-либо программой, а ~/.bashrc – это файл конфигурации интерактивных экземпляров bash. Вы не должны определять переменные среды в ~/.bashrc . Правильное место для определения переменных среды, таких как PATH равно ~/.profile (или ~/.bash_profile если вам не нужны оболочки, отличные от bash). Посмотрите, в чем разница между ними и какой из них я должен использовать?

Заметки о оболочках, отличных от bash

В bash, ksh и zsh, export является специальным синтаксисом, и оба PATH=~/opt/bin:$PATH и export PATH=~/opt/bin:$PATH делают все правильно. В других оболочках Bourne / POSIX, таких как тире (которые есть /bin/sh во многих системах), export анализируется как обычная команда, что подразумевает две отличия:

  • ~ анализируется только в начале слова, за исключением назначений (см. раздел «Как добавить путь к исходному каталогу, который будет обнаружен Unix, какая команда?»).
  • $PATH вне двойных кавычек ломается, если PATH содержит пробелы или \[*? ,

Таким образом, в оболочках, подобных тире, export PATH=~/opt/bin:$PATH устанавливает PATH в литеральную строку ~/opt/bin/: за ней следует значение PATH до первого места. PATH=~/opt/bin:$PATH (нечеткое задание) не требует кавычек и делает правильные вещи. Если вы хотите использовать export в переносном скрипте, вам нужно написать export PATH="$HOME/opt/bin:$PATH" .

¹ Это было неверно в ракетах Борна (как в реальной оболочке Борна, не в современных оболочках в стиле POSIX), но вы вряд ли столкнетесь с такими старыми оболочками в наши дни.

В любом случае это работает, но они не делают то же самое: элементы PATH проверяются слева направо. В первом примере исполняемые файлы в ~/opt/bin будут иметь приоритет над установленными, например, в /usr/bin , что может быть или не быть тем, что вы хотите.

В частности, с точки зрения безопасности, опасно добавлять пути к фронту, потому что, если кто-то может получить доступ на запись к вашему ~/opt/bin , они могут, например, разместить другие ls , которые вы "d, то, вероятно, используйте вместо /bin/ls не заметив. Теперь представьте себе то же, что и для ssh или вашего браузера или выбора … (То же самое можно сделать трижды на вашем пути.)

Меня смущает вопрос 2 (поскольку он был удален из вопроса, поскольку он был связан с проблемой, не связанной с ней):

Каков эффективный способ добавления дополнительных путей в разные строки? Первоначально я думал, что это может сделать трюк:

Export PATH=$PATH:~/opt/bin export PATH=$PATH:~/opt/node/bin

но это происходит не потому, что второе назначение не только добавляет ~/opt/node/bin , но и все ранее назначенные PATH .

Это возможное решение:

Export PATH=$PATH:~/opt/bin:~/opt/node/bin

но для удобства чтения я предпочел бы иметь одно назначение для одного пути.

Если вы говорите

PATH=~/opt/bin

это все, что будет в вашем PATH. PATH – это просто переменная среды, и если вы хотите добавить в PATH, вам нужно перестроить переменную именно с нужным содержимым. То есть то, что вы даете в качестве примера на вопрос 2, – это именно то, что вы хотите сделать, если я полностью не упущу точку вопроса.

Я использую обе формы в своем коде. У меня есть общий профиль, который я устанавливаю на каждом компьютере, на котором я работаю, который выглядит так, чтобы разместить потенциально отсутствующие каталоги:

Export PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # add optional items to the path for bindir in $HOME/local/bin $HOME/bin; do if [ -d $bindir ]; then PATH=$PATH:${bindir} fi done

Linux определяет исполняемый путь поиска с $PATH среды $PATH . Чтобы добавить каталог / данные / myscripts в начало $PATH среды $PATH , используйте следующее:

PATH=/data/myscripts:$PATH

Чтобы добавить этот каталог в конец пути, используйте следующую команду:

PATH=$PATH:/data/myscripts

Но предыдущие недостаточно, потому что, когда вы устанавливаете переменную среды внутри скрипта, это изменение действует только внутри скрипта. Это ограничение ограничено только двумя способами:

  • Если в сценарии вы экспортируете переменную окружения, она эффективна в рамках любых программ, вызываемых скриптом. Обратите внимание, что это не эффективно в программе, которая называется скриптом.
  • Если программа, вызывающая сценарий, делает это путем включения вместо вызова, любые изменения среды в скрипте эффективны в вызывающей программе. Такое включение может быть выполнено с помощью команды dot или команды source.

$HOME/myscript.sh source $HOME/myscript.sh

Включение в основном включает «вызываемый» скрипт в сценарии «вызова». Это похоже на #include в C. Таким образом, он эффективен внутри скрипта или программы вызова. Но, конечно, это не эффективно для любых программ или скриптов, вызываемых вызывающей программой. Чтобы сделать его эффективным вплоть до цепочки вызовов, вы должны следовать настройке переменной среды с помощью команды export.

В качестве примера, программа оболочки bash включает в себя содержимое файла.bash_profile по включению. Итак, добавив следующие 2 строки в.bash_profile:

PATH=$PATH:/data/myscripts export PATH

эффективно помещает эти 2 строки кода в программу bash. Таким образом, в bash переменная $ PATH включает $HOME/myscript.sh , и из-за инструкции экспорта любые программы, вызываемые bash, имеют измененную $PATH . И поскольку любые программы, запускаемые из приглашения bash, вызывается bash, новый путь действует для всего, что вы запускаете из подсказки bash.

Суть в том, что для добавления нового каталога в путь вам необходимо добавить или добавить каталог в переменную среды $ PATH в скрипте, включенном в оболочку, и вы должны экспортировать $PATH среды $PATH .

Дополнительная информация здесь

В течение некоторого времени я сохранил со мной две функции pathadd и pathrm которые помогают добавлять элементы в путь без необходимости беспокоиться о дублированиях.

pathadd принимает один аргумент пути и необязательный аргумент after который, если он будет добавлен, добавится к PATH иначе он добавит его.

Почти в каждой ситуации, если вы добавляете путь, вы, вероятно, хотите переопределить все, что уже есть в пути, поэтому я предпочитаю добавлять по умолчанию.

Pathadd() { newelement=${1%/} if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; then if [ "$2" = "after" ] ; then PATH="$PATH:$newelement" else PATH="$newelement:$PATH" fi fi } pathrm() { PATH="$(echo $PATH | sed -e "s;\(^\|:\)${1%/}\(:\|\$\);\1\2;g" -e "s;^:\|:$;;g" -e "s;::;:;g")" }

Поместите их в любой скрипт, который вы хотите изменить среду PATH, и теперь можете это сделать.

Pathadd "/foo/bar" pathadd "/baz/bat" after export PATH

Вам гарантировано не добавлять к пути, если он уже существует. Если вы теперь хотите, чтобы /baz/bat был на старте.

Pathrm "/baz/bat" pathadd "/baz/bat" export PATH

Теперь любой путь можно перенести на передний план, если он уже находится на пути без удвоения.

Я не могу говорить о других дистрибутивах, но у Ubuntu есть файл, / etc / environment, который является стандартным поисковым путем для всех пользователей. Поскольку мой компьютер используется только мной, я помещаю любые каталоги, которые я хочу на моем пути, если только это временное дополнение, которое я ввел в сценарий.

Вот мое решение:

PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: "!x[$0]++" | sed "s/\(.*\).\{1\}/\1/")

Хороший легкий лайнер, который не оставляет трейлинг:

Для меня (в Mac OS X 10.9.5) добавление имени пути (например, /mypathname) в файл /etc/paths очень хорошо работало.

Перед редактированием возвращается echo $PATH:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

После редактирования /etc/paths и перезапуска оболочки переменная $ PATH добавляется с /pathname . Действительно, echo $PATH возвращает:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

Случилось так, что /mypathname добавлено в $PATH .

Чтобы добавить новый путь к PATH среды PATH:

Export PATH=$PATH:/new-path/

Чтобы это изменение применялось к каждой открытой оболочке, добавьте ее в файл, который будет вызываться оболочкой при ее вызове. В разных оболочках это может быть:

  • Bash Shell: ~ / .bash_profile, ~ / .bashrc или профиль
  • Korn Shell: ~ / .kshrc или.profile
  • Z Shell: ~ / .zshrc или.zprofile

например

# export PATH=$PATH:/root/learning/bin/ # source ~/.bashrc # echo $PATH

Вы можете увидеть предоставленный путь в вышеупомянутом выходе.

Пакет AIR SDK содержит несколько программ, которые можно запускать из командной строки или окна терминала. Запускать эти программы будет намного удобнее, если определить путь к каталогу bin SDK с помощью переменной среды Path.

В данном разделе представлено общее описание процедуры настройки пути в Windows, Mac и Linux. Однако конфигурации компьютеров могут существенно отличаться, поэтому данная процедура работает не во всех системах. В этом случае нужную информацию можно найти в документации по операционной системе или в Интернете.

Настройка переменной среды PATH в Linux и Mac OS с использованием оболочки Bash

Когда команда вводится в окно терминала, оболочка (программа, которая считывает вводимые команды и пытается отреагировать соответствующим образом) сначала должна найти программу команды в файловой системе. Оболочка выполняет поиск команд в списке каталогов, который хранится в переменной среды с именем $PATH. Чтобы посмотреть текущее значение переменной path, введите следующую команду:

Echo $PATH

Будет выведен список разделенных двоеточием каталогов примерно в таком виде:

/usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/x11/bin

Путь к каталогу bin пакета AIR SDK необходимо добавить в этот список, чтобы оболочка могла находить ADT и инструменты ADT. Предположим, что AIR SDK находится в каталоге /Users/fred/SDKs/AIR . В этом случае для добавления нужных каталогов в переменную среды path используется следующая команда:

Export PATH=$PATH:/Users/fred/SDKs/AIR/bin:/Users/fred/SDKs/android/tools

Примечание. Если путь содержит символы пробелов, перед ними следует вставить символ обратной косой черты, как показано ниже:

/Users/fred\ jones/SDKs/AIR\ 2.5\ SDK/bin

Чтобы проверить результаты добавления, можно еще раз выполнить команду echo:

Echo $PATH /usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/x11/bin:/Users/fred/SDKs/AIR/bin:/Users/fred/SDKs/android/tools

Каталоги добавлены успешно. Теперь вы сможете вызывать следующие команды и получать корректный ответ:

Adt -version

Если переменная среды $PATH была изменена правильно, в результате выполнения команды должна быть выдана версия среды ADT.

Однако имеется одна проблема: при открытии нового окна терминала вы заметите, что переменная path больше не содержит новые элементы, которые ранее были в нее добавлены. Команду настройки пути необходимо выполнять каждый раз при запуске нового терминала.

Общим решением этой проблемы будет добавление команды в один из сценариев запуска, которые используются оболочкой. В ОС Mac OS можно создать файл.bash_profile в каталоге ~/username, который будет запускаться каждый раз при открытии нового окна терминала. В Ubuntu сценарием, который запускается при открытии нового окна терминала, является.bashrc. В других дистрибутивах Linux и оболочках применяются аналогичные правила.

Процедура добавления команды в сценарий запуска оболочки

    Измените домашний каталог:

    Создайте профиль конфигурации оболочки (при необходимости) и перенаправьте вводимый текст в конец файла с помощью команды « cat >> ». Используйте соответствующий файл для своей операционной системы и оболочки. Например, в ОС Mac OS можно использовать.bash_profile , а в Ubuntu - .bashrc .

    Cat >> .bash_profile

    Введите текст, который требуется добавить в файл:

    Export PATH=$PATH:/Users/cward/SDKs/android/tools:/Users/cward/SDKs/AIR/bin

    Завершите перенаправление текста, нажав клавиши CTRL-SHIFT-D на клавиатуре.

    Отобразите файл, чтобы убедиться в правильности выполнения операции:

    Cat .bash_profile

    Откройте новое окно терминала, чтобы проверить путь:

    Echo $PATH

    Добавленные элементы должны быть выведены на экране.

Если позднее будет создана новая версия одного из пакетов SDK, которая будет помещена в другой каталог, команду настройки пути в файле конфигурации необходимо будет обновить соответствующим образом. В противном случае оболочка продолжит использование старой версии.

Настройка переменной среды PATH в ОС Windows

При открытии командное окно в Windows наследует глобальные переменные среды, определенные в свойствах системы. Одной из важных переменных является переменная path, содержащая список каталогов, в которых выполняется поиск введенной программы. Чтобы посмотреть текущий список каталогов в переменной path, в командном окне можно ввести следующую команду:

Set path

Будет выведен список разделенных двоеточием каталогов, который выглядит примерно следующим образом:

Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

Путь к каталогу bin пакета AIR SDK необходимо добавить в этот список, чтобы программа команд могла находить ADT и инструменты ADT. Предположим, что пакет AIR SDK находится в каталоге C:\SDKs\AIR . В этом случае путь можно добавить следующим образом:

    В разделе «Панель управления» откройте диалоговое окно «Свойства системы» или нажмите правой кнопкой мыши на значке «Мой компьютер» и в меню выберите пункт «Свойства».

    На вкладке «Дополнительно» нажмите кнопку «Переменные среды».

    В разделе «Системные переменные» диалогового окна «Переменные среды» выберите элемент «Path».

    Нажмите кнопку «Изменить».

    Перейдите в конец строки в поле «Значение переменной».

    В самом конце текущего значения введите следующий текст:

    ;C:\SDKs\AIR\bin

    Нажмите кнопку «OK» во всех диалоговых окнах, чтобы сохранить путь.

Если в этот момент имеются открытые командные окна, изменения для них применены не будут. Откройте новое командное окно и введите следующую команду, чтобы убедиться в правильности настройки переменной среды:

Adt -version

Если позднее расположение пакета AIR SDK будет изменено или будет добавлена новая версия, переменную среды path необходимо будет изменить соответствующим образом.

Переменные окружения (environment variable ) используются для хранения общих значений переменных в пределах разных сценариев и программ. Такие переменные можно устанавливать на время, например на период работы конкретной оболочки терминала, или на период сессии пользователя, либо же установить переменную окружения на глобальном уровне - для всей системы.

Переменные окружения

$HOME
Переменная содержит путь к домашнему каталогу текущего пользователя. $USER
Имя текущего пользователя $PATH
Список каталогов для поиска оболочкой исполняемых программ. $PWD
Путь к текущему рабочему каталогу (либо pwd ). Пример: dir_path=$(pwd) . $SHELL
Интерпретатор по умолчанию $RANDOM
Генерирует рандомное число 0..32767 при каждом доступе к переменной. $SECONDS
Время в сек. с момента запуска командной оболочки. $? Результат выполнения предыдущей команды. $HOSTNAME
Имя компьютера $HISTFILE
Путь к файлу истории интерпретатора $IFS
Список символов-разделителей команд, параметров, элементов массива (по умолчанию: пробел, таб, новая строка) $PS1
Шаблон строки приглашения интерпретатора.

Временная установка переменной окружения

Установка переменной окружения на период сессии:

# Для нового процесса env имя_переменной=значение [команда] # Для текущей оболочки и всех ее подпроцессов export имя_переменной=значение [команда]

Значение переменной сохраняется до перезагрузки системы.

Установка постоянного значения

Переменные окружения на уровне системы устанавливаются через файл /etc/environment:

ENVIRONMENT="dev"

Установка переменной окружения для конкретного пользователя через файл ~/ .bashrc или ~/.bash_profile:

PATH="${PATH}:/home/user/bin:"

Внимание!

Файл ~/.bash_profile будет выполнен при запуске интерпретатора с ключом -l. При локальном входе этот файл не читается!

Также нужно помнить, что изменения вступят в силу только после перезагрузки сеанса!

Просмотр значения переменной окружения

Для просмотра значения переменной окружения есть команда printenv:

Printenv <имя_переменной>

#shell, #bash, #environment

Как вы уже знаете, при входе любого пользователя в систему для него запускается особый экземпляр оболочки — login shell. В процессе запуска в качестве login shell bash ищет следующие файлы:

  • /etc/profile
  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile

(в указанном порядке) и выполняет содержащиеся в них команды. Если bash запускается повторно из командной строки в интерактивном режиме (т. е. не для выполнения какой-то одиночной команды), то он находит файл ~/.bashrc и выполняет содержащиеся в нем команды. Впрочем, в дистрибутиве Mandrake файл ~/.bashrc вызывается и для login shell, а из него вызывается еще и общесистемный файл /etc/bashrc. Так что, как видите, тут возможны варианты.

Но какова бы ни была последовательность вызова этих скриптов, с их помощью для каждого сеанса работы пользователя создается так называемая "пользовательская среда" или окружение, представляющая собой набор переменных с установленными для них значениями. Эти значения считываются некоторыми программами и утилитами, и в соответствии с их значениями изменяется поведение системы в тех или иных ситуациях.

Файлы /etc/profile и /etc/bashrc определяют общесистемные настройки пользовательской среды, а остальные перечисленные файлы определяют индивидуальную среду конкретного пользователя. Сравнительно небольшие добавления или исправления в индивидуальных файлах настройки, изменяющие значения, заданные по умолчанию, могут сделать значительно более приятной для вас работу в системе (о вкусах, как известно, не спорят, и вряд ли люди, которые определяли настройки по умолчанию, угадали ваши предпочтения). Поэтому давайте кратко рассмотрим основные переменные пользовательской среды и то, каким образом вы сами можете их изменять.

Вначале посмотрите переменные окружения, которые заданы по умолчанию. Как мы уже говорили в разд. 5.6 , это можно сделать с помощью команд set (и аналогичной ей команды typeset ) или env . Значение, присвоенное отдельной переменной, можно просмотреть с помощью команды echo $name , где name — имя переменной.

Из всех переменных, которые вы увидите по команде set , обычно меняют вид приглашения PS1 и перечень путей поиска PATH. О том, как поменять значения этих переменных, было подробно рассказано в разд. 5.6 . Если вы почему-либо пропустили этот раздел, загляните в него сейчас. Так что осталось только решить, в каком именно скрипте задать этим переменным новые значения. Рассмотрим этот вопрос на примере переменной PATH.

Переменная PATH формируется в двух скриптах: /etc/profile (пути, общие для всех пользователей) и в одном из пользовательских скриптов (например, в ~/.bash_profile), где к ранее сформированному перечню пользователь может добавить пути по своему желанию. Только не стоит делать это в файле ~/bashrc, так как последний перезапускается каждый раз при запуске второго, третьего и т. д. экземпляра оболочки. Для добавления пути в переменную PATH надо вписать в выбранный скрипт строку следующего вида (в этом примере в перечень добавляется путь /home/user/bin):

PATH=$PATH:/home/user/bin

Обратите внимание на то, что двоеточия в конце нет. И имейте в виду, что каталоги просматриваются в поисках нужного файла в том порядке, как они перечислены в переменной PATH.

В отличие от MS-DOS Linux не ищет исполняемый файл в текущем каталоге. Поэтому, если вы хотите, чтобы поиск производился и в текущем каталоге, надо добавить и этот каталог (напомним, что он имеет имя, состоящее из одной точки) в переменную PATH. Но имейте в виду, что с точки зрения безопасности добавлять текущий каталог в перечень путей поиска недопустимо, так как злоумышленник может поместить в один из доступных ему по записи каталогов вредоносную программу, названную именем одной из часто используемых системных утилит. И, когда вы запустите эту программу, считая, что запускаете системную утилиту, она может нанести большой вред вашей системе, тем более, если вы запустили ее от имени суперпользователя.

При желании можно слегка "украсить себе жизнь", включив цветной вывод в команде ls (если по умолчанию он черно-белый). Для этого редактируем файл /etc/bashrc, в который добавляем строку:

alias ls = "ls -F --color"

Кстати, если вы захотите, чтобы Midnight Comma nder в окне эмулятора терминала был цветным, а не черно-белым, то установите переменную COLORTERM :

COLORTERM = ; export COLORTERM

В. Костромин (kos at rus-linux dot net) - 8.8. Настройка окружения пользователя

В продолжение темы:
Android

Популярная социальная сеть ВКонтакте позволяет находить новых друзей и держать контакт со всеми близкими. Помимо этого, каждый пользователь может делиться собственными...