Что экспортирует PATH = что-то: $ PATH означает?

Будьте осторожны с OpenSUSE - они все еще используют GRUB в качестве своего загрузчика, а Ubuntu использует GRUB2. (Начиная с версии 11.4, есть возможность пойти с GRUB2.) Если вы используете Ubuntu в качестве основной ОС и замените GRUB2 на GRUB во время установки OpenSUSE, это может вызвать проблемы. (По крайней мере, некоторые из структуры командной строки отличаются друг от друга, поэтому, например, это может затруднить выполнение инструкции.)

Я не выполнил установку с 11.4, но я у вас есть 11.3, установленных на втором жестком диске. Если они не внесли серьезных изменений, одним из вариантов при установке OpenSUSE является установка без загрузчика вообще. После установки вам нужно запустить sudo update-grub от Ubuntu, чтобы добавить OpenSUSE в загрузчик. (Это был вариант, с которым я пошел, поскольку я хотел сохранить загрузчик Ubuntu.) Единственный недостаток в этом заключается в том, что всякий раз, когда OpenSUSE обновляет свое ядро, вам необходимо вручную обновить grub (изнутри Ubuntu - по крайней мере, это самый простой способ ИМО).

Я думаю, что Fedora 15 также использует GRUB2; если вы установите Fedora второй, вы получите тему Fedora для загрузчика, но в противном случае нет разницы.

1
задан 14 January 2016 в 07:16

5 ответов

Что это за «экспортная» фраза в начале?

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

Что это за «экспортная» фраза в начале?

Является ли это экспортирование данных для Bash?

Что такое первый [ f5] и что второе $PATH, и зачем нам нужны два?

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.

32
ответ дан 23 May 2018 в 14:18

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

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

15
ответ дан 23 May 2018 в 14:18

Вот команда, чтобы все могли следить за ходом очков. 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
$ 

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

export shell (что означает, что нет команды /bin/export, это оболочка) в основном делает переменные среды доступными для других программ, вызванных из bash (см. связанный вопрос в Extra Reading) и подоболочки.
2
ответ дан 23 May 2018 в 14:18
  • 1
    Нет, ~ в ~/.composer/vendor/bin не будет расширен! Тильда расширяется только в нескольких особых местах, например, сразу после знака =. PATH="~/.foo:$PATH" приводит к ~/.foo:/other/path/dirs.... Но ~ будет расширен в PATH=~"/.foo:$PATH", что приводит к /home/user/.foo:/other/path/dirs.... – Volker Siegel 14 January 2016 в 07:49

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

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

В качестве переменной значение присваивается слева знак =. Поскольку имя переменной заменяется ее значением справа от знака =. Это делает старое значение частью нового значения.
1
ответ дан 23 May 2018 в 14:18
  • 1
    " То есть без него переменная PATH не будет видна в подоболочках. " Это неверно; PATH является переменной environment (что не совсем то же, что и переменная shell ), поэтому она автоматически экспортируется, а команда export не нужна. – David 14 January 2016 в 20:24
  • 2
    Семейство оболочек Bourne на самом деле не отличает переменные оболочки и среды. ( sc.tamu.edu/help/general/unix/vars.html ) В моей системе (Arch Linux) bash даже не знает команду setenv. – rexkogitans 14 January 2016 в 20:41
  • 3
    По-прежнему существует разница между переменными среды, о которых знает ядро, и переменными оболочки, которые являются внутренними для bash. Поскольку PATH происходит из среды, он автоматически экспортируется, поэтому вам не нужно запускать export для изменений, которые должны быть переданы дочерним процессам (вопреки тому, что говорит страница, на которую вы ссылаетесь). – David 14 January 2016 в 21:16
  • 4
    Переменные среды не являются свойством ядра, а процесса. Поскольку процесс, о котором мы говорим, это sh, bash (использует ли Ubuntu zsh?), Я думаю, мы можем оставить их равными переменным оболочки. Но, конечно, переменные оболочки не передаются ни в какие случайные программы, как переменные среды. – rexkogitans 14 January 2016 в 21:38
  • 5
    Я думаю, что в этот момент мы увязли в семантике. Все, что я пытался сказать, это то, что в bash, PATH=foo и export PATH=foo имеют одинаковое поведение. – David 15 January 2016 в 00:17
export PATH="~/.composer/vendor/bin:$PATH"
export является командой buildin для bash, это означает, что переменными экспорта являются переменная envirement. (вы можете набрать help export, чтобы опереться (характеристики, которые следуют за командой, являются параметрами, расщепляемыми пробелом, поэтому в этом случае есть только один параметр) PATH - это имя переменной, обычно предопределенная varibale by bash, (f5) означает присвоение значения этой переменной. Вся строка - это значение переменной varibale, $PATH является своего рода funciton bash с именем variable expantion, bash заменит значение существующего [ f8] в строке параметров, ПЕРЕД отправкой строки в export команду : в spcial char в переменной PATH и понимаемой всем приложением, которое хочет использовать эту переменную. Это означает, что seperator будет иметь много каталогов в переменной PATH.
0
ответ дан 23 May 2018 в 14:18

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

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