Я очень новичок в Linux, и я поместил следующую команду в конец файла .profile
в моей домашней папке:
export PATH="~/.composer/vendor/bin:$PATH"
Я немного знаю проблемы переменных среды и их значений из Windows, но в этом случае я хочу понять, что делает эта команда, и из каких частей она состоит:
Что это за фраза "экспорт" в начале? Это экспорт данных, которые будут доступны для Bash?
Что такое первое,
PATH
а что второе$PATH
, и зачем нам два?
command-line
bash
environment-variables
JohnDoea
источник
источник
export
команду, потому чтоPATH
переменная уже помечена как экспортированная. (Попробуйте оба способа, если вы мне не верите!)Ответы:
export
является командой (точнее, встроенной в Bash , то есть в ней нет исполняемого файлаPATH
, это команда, встроенная в Bash).export
устанавливает переменную окружения в левой части назначения в значение в правой части назначения; такая переменная окружения видна процессу, который ее устанавливает, и всем подпроцессам, порожденным в одной и той же среде, т.е. в этом случае экземпляру Bash, который является источником,~/.profile
и всем подпроцессам, порожденным в той же среде (которая может включать, например, также другие оболочки) который, в свою очередь, сможет получить к нему доступ).Первая,
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:
в начале).источник
https://help.ubuntu.com/community/EnvironmentVariables , вероятно, поможет вам. Также
man bash
может быть очень полезно понять, как это работает (по крайней мере, в Bash)В любом случае - поскольку
PATH=
вы в основном устанавливаетеPATH
переменную, добавляете несколько новых путей для поиска, добавляете в конце уже / ранее заданные пути с помощью$PATH
(что по сути является ссылкой наPATH
переменную).Итак, скажем, ваш
PATH
был настроен на что-то вроде:и тогда вы установите
ваш
PATH
после этого будет как:Я надеюсь, что в этом есть смысл.
Кроме того, вы экспортируете новую переменную, чтобы она была известна в вашей среде, включая также дочерние процессы / подоболочки.
Также имейте в виду, что порядок каталогов, как установлено,
PATH
может быть важным. И что-то вродеPATH="$PATH:a:b:c"
даст вам результат:который будет влиять на порядок каталогов / путей при поиске команды (если ваша команда находится в нескольких каталогах, будет использоваться первый найденный - что иногда может дать неожиданные результаты).
источник
Вот команда, чтобы каждый мог следовать за ними, когда они проходят пункты пули.
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
, моя переменная может быть передана и использована в последующей цепочке команд / подпроцессов, где я экспортировал эту же переменнуюДополнительное Чтение
источник
~
в~/.composer/vendor/bin
не будет расширяться! Тильда раскрывается только в нескольких особых местах, например, сразу после=
знака.PATH="~/.foo:$PATH"
результаты в~/.foo:/other/path/dirs...
. Но~
будет расширен, вPATH=~"/.foo:$PATH"
результате чего/home/user/.foo:/other/path/dirs...
.Я читал здесь и в других местах в Интернете, говорил с другом об этом и решил, что как новичок (может быть, больше новичка в Ubuntu, чем некоторые здесь могут подумать), я должен сопоставить эту команду - я должен составить карту и таким образом, узнайте, что это и где:
Предварительные данные
Если на данный момент вы не поняли что-то в этой главе - не волнуйтесь, это станет более понятным, так как вы будете продолжать читать, но чтобы понять этот вопрос, вам нужно прочитать переменные среды (EV), их значения и цель. , Теперь я попытаюсь объяснить команду простыми словами и методом отображения для новичков, таких как я, и только для новичков. Пытался сделать все возможное здесь ...
картографирование
Исходное значение EV «PATH» в Ubuntu 15.10:
В самой заметке команды у нас есть две фразы PATH. Последний - $ PATH - $ говорит «напечатать оригинальное значение или значения EV рядом с вами»; EV рядом с ним - ПУТЬ EV.
Мы экспортировали саму переменную пути (сделав ее доступной также для подпроцессов, процессов IE, которые выполняются в CLI, которые на самом деле не являются оболочкой Bash, но работают внутри нее (например, Drush , которая является Drupal CLI).
Помимо экспорта мы также расширили его: первая фраза PATH (PATH =) использовала нас, чтобы добавить дополнительное значение (~ / .composer / vendor / bin :) к исходному значению (представленному $ PATH).
Двоеточие (:) в конце нового значения, которое я упоминал в предыдущем абзаце, используется для отличия нового значения от исходного.
«» - это область, в которой находятся значения.
~ Это домашняя папка.
Я надеюсь, что после того, как я сделал это отображение, команда будет понятнее новичкам, таким как я.
источник
Команда
export
делает переменные доступными в подоболочках. То есть без него переменнаяPATH
не была бы видна в подоболочках.PATH
упоминается дважды:=
знака.=
знака. Это делает старое значение частью нового значения.источник
PATH
не была бы видна в подоболочках». Это неверно;PATH
является переменной окружения (которая не совсем то же самое, что переменная оболочки ), поэтому она автоматически экспортируется, иexport
команда не нужна.setenv
команду.PATH
происходит из среды, он автоматически экспортируется, поэтому вам не нужно запускатьexport
изменения, которые будут распространены на дочерние процессы (в отличие от того, что говорит ссылка на странице).PATH=foo
иexport PATH=foo
ведут себя идентичноexport
является командой Buildin Баш, значит экспортировать переменные быть envirement переменной. (вы могли бы напечататьhelp export
больше(символы, следующие за командой, являются параметрами, разделенными пробелами, поэтому в этом случае существует только один параметр)
PATH
это имя переменной, как правило, предопределен varibale на баш, будет назван в прописные.=
означает присвоить значение этой переменной.вся строка является значением переменной
$PATH
является своим родом Funciton Баша, названноеvariable expantion
, Баш заменит значение EXISTPATH
в строке параметров, перед отправкой в строкеexport
команды:
в spcial полукокса в переменной PATH и understooded всеми приложения , которые хотят использовать эту переменную. это означает разделитель. поэтому у них будет много каталогов в переменной PATH.источник