Что действительно экспортирует PATH=something: средний $PATH?

Я очень плохо знаком с Linux, и я поместил следующую команду в конце файла .profile под моей домашней папкой:

export PATH="~/.composer/vendor/bin:$PATH"

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

  1. Какова эта фраза "экспорта" в запуске? Это экспортирует данные, чтобы быть доступным для Bash?

  2. Что является первым PATH и что является вторым $PATH, и почему нам нужно два?

27
задан 13 January 2016 в 20:16

6 ответов

Я читал здесь и в других местах в сети, говорил с другом об этом и решил, что как новичок (возможно, больше новичка Ubuntu затем некоторые здесь могли бы думать), я должен отобразить эту команду - я должен сделать карту и таким образом узнать, что это - whatabouts и местонахождение:

Предварительные данные

, Если на данный момент Вы не поняли, что-то в этой главе - не волнуется, это станет более ясным, поскольку Вы будете продолжать читать, но понимать этот вопрос, который действительно необходимо считать на Переменных среды (EVs), их значениях и цели. Я теперь попытаюсь объяснить команду в простых словах и в методе отображения для вновь прибывших как я, и только для вновь прибывших. Попробованный для приложения все усилия здесь...

Отображение

export PATH="~/.composer/vendor/bin:$PATH"

исходное значение EV "ПУТЬ", поскольку это идет с Ubuntu 15.10:

/usr/bin:/usr/sbin

В самой команде отмечают, что у нас есть две фразы PATH. Последний является $PATH - $ говорит, "печатают исходное значение или значения EV рядом с Вами"; EV рядом с ним является PATH EV.

, Мы экспортировали сама переменная пути (сделал это доступным для подпроцессов также, Т.Е. процессов, которые работают в CLI, которые не являются на самом деле оболочкой Bash, но выполненный в нем (такой как Drush, который является Drupal CLI).

Помимо экспорта мы также развернули его: первая фраза PATH (PATH =) использовала нас для добавления дополнительного значения (~/.composer/vendor/bin:) к исходному значению (представленный $PATH).

  • двоеточие (:) в конце нового значения я упомянул в вышеупомянутом абзаце, использует для отличного новое значение от исходного.

  • "" область, в которой находятся value/s.

  • ~ является домашней папкой.

<час>

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

2
ответ дан 23 November 2019 в 01:02

Эти export команда делает переменные доступными в подоболочках. Таким образом, без него переменная PATH не была бы видима в подоболочках.

PATH упоминается дважды:

  • Как переменная значению присваивают, оставляют эти = знак.
  • Как имя переменной, заменяемое его правом значения на эти = знак. Это заставляет старое значение быть частью нового значения.
1
ответ дан 23 November 2019 в 01:02
export PATH="~/.composer/vendor/bin:$PATH"
  1. эти export команда здания удара, переменные средств экспорта, чтобы быть envirement переменной. (Вы могли ввести help export для склонности больше

    (символы следуют, команда параметры, splited пространством, так в этом случае, там только один параметр)

  2. эти PATH имя переменной, обычно, предопределил varibale ударом, быть названным в Верхнем регистре.

  3. = средства присваивают значение этой переменной.

  4. вся строка является значением varibale

  5. эти $PATH, своего рода funciton удара, названного variable expantion, удар заменит значение существования PATH в строке параметров, ПРЕЖДЕ ЧЕМ отправят строку в export команда

  6. : в spcial символе в переменной ПУТИ и понятый под всем приложением, которые хотят использовать эту переменную. это означает разделитель. таким образом, у них будет много каталогов в переменной ПУТИ.

0
ответ дан 23 November 2019 в 01:02

Какова эта фраза "экспорта" в запуске?

export команда (более точно, это - встроенный Bash, т.е. это не исполняемый файл, существующий в PATH, это - команда, которую Bash имеет встроенный сам по себе).

Это экспортирует данные, чтобы быть доступным для Bash?

export устанавливает переменную среды на левой стороне присвоения на значение на правой стороне присвоения; такая переменная среды видима к процессу, который устанавливает ее и на все подпроцессы, порожденные в той же среде, т.е. в этом случае к экземпляру Bash это получает ~/.profile и ко всем подпроцессам, порожденным в той же среде (который может включать, например, также другие оболочки, которые в свою очередь смогут получить доступ к ней).

Что является первым PATH и что является вторым $PATH, и почему нам нужно два?

Первое PATH как объяснено выше переменная среды, которая будет установлена с помощью export.

С тех пор PATH обычно содержит что-то когда ~/.profile получен (по умолчанию, это содержит /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games), просто установка PATH кому: ~/.composer/vendor/bin сделал бы PATH содержите только ~/.composer/vendor/bin.

Таким образом, так как ссылки на переменную в команде заменены (или "расширены" до), значение переменной Bash во время оценки команды, :$PATH помещается в конце значения, которому присвоят PATH так, чтобы PATH заканчивает тем, что содержал ~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games (т.е. что PATH уже содержит плюс ~/.composer/vendor/bin: в запуске).

39
ответ дан 23 November 2019 в 01:02

https://help.ubuntu.com/community/EnvironmentVariables, вероятно, поможет Вам. Также man bash может быть очень полезным с пониманием, как это работает (по крайней мере, в Bash)

Так или иначе - что касается PATH= Вы в основном устанавливаете PATH переменная, добавляя некоторые новые пути для поиска, уже добавив в конце / ранее установленные пути, с $PATH (который является в основном ссылкой на PATH переменная).

Так, скажите Ваш PATH был до сих пор установлен на что-то как:

PATH="x:y:z"

и затем Вы устанавливаете

PATH="a:b:c:$PATH"

Ваш PATH после того, как это будет похоже:

a:b:c:x:y:z

Я надеюсь, что это имеет смысл.

И к тому же Вы экспортируете новую переменную, таким образом, она известна в Вашей среде включая также дочерние процессы / подоболочки.

Просто знайте также что порядок каталогов, как начато PATH может быть важным. И что-то как PATH="$PATH:a:b:c" даст Вам результат:

x:y:z:a:b:c

который будет влиять на порядок каталогов / пути при поиске команды (если у Вас будет своя команда в больше чем одном из каталогов, то найденное первое будет использоваться - который может иногда давать Вам некоторые неожиданные результаты).

16
ответ дан 23 November 2019 в 01:02

Вот команда так, чтобы все могли следовать вперед, поскольку они проходят пункты маркированного списка. export PATH="~/.composer/vendor/bin:$PATH"

  • export окружите встроенный (значение, что существует нет /bin/export , это - вещь оболочки), команда в основном делает переменные среды доступными для других программ названный от bash (см. связанный вопрос в Дополнительном Чтении), и подоболочки.
  • Присвоение в оболочке возьмет расширение сначала, затем присвоение произойдет второе. Таким образом, то, что является внутренними двойными кавычками, расширено сначала, сохраненное к PATH переменная позже.
  • $PATH значение по умолчанию PATH присвоение (или по крайней мере то, на что переменная похожа до этой команды, появляется в Вашем .bashrc или .profile), и разверните его.
  • ~/.composer/vendor/bin движение должно расшириться до /home/username/.composer/vendor/bin , где .composer скрытая папка из-за ведущей точки.
  • Настолько короткий ~/.composer/vendor/bin:$PATH теперь преобразовали в длинный список папок, разделенных :. Все включается в двойные кавычки так, чтобы мы включали папки с пробелами в их пути.
  • Наконец все хранится в PATH переменные и внешние команды позволили использовать его

Простой пример

Моя интерактивная оболочка на самом деле mksh , который, оказывается, также имеет export встроенный. При помощи export установить VAR, моя переменная может передаваться и использоваться последующей цепочкой команд/подпроцессов, куда я экспортировал ту же самую переменную

$ echo $SHELL            
/bin/mksh
$ VAR="HelloAskUbuntu"
$ bash -c 'echo $VAR' 
$ export VAR="HelloAskUbuntu"                                                  
$ bash -c 'echo $VAR'                                                          
HelloAskUbuntu
$ 

Дополнительное чтение

2
ответ дан 23 November 2019 в 01:02

Другие вопросы по тегам:

Похожие вопросы: