Что делает строка экспорта PATH в .bashrc?

9

Я не настолько увлечен Linux, и у меня есть следующие сомнения после урока.

Я должен изменить bashrcфайл. Какие настройки содержатся в этом файле? Я думаю, что-то связано со средой оболочки bash, но я не уверен в этом.

Я должен вставить эту строку:

export PATH=$HOME/.local/bin:$HOME/.local/usr/bin:$PATH

Что именно делает эта линия?

Я думаю, что это exportутверждение используется для создания новой переменной, делающей ее доступной для другой программы.

Но что именно делает эта линия? Является ли PATHимя переменной, которую я определяю? Что такое $HOME?

Что означает :символ между PATH=$HOME/.local/binи $HOME/.local/usr/binи $PATHразделом в предыдущем выражении?

Что именно означает это выражение?

AndreaNobili
источник
: Между элементами является разделителем для каждого сегмента. Без этого ваш путь был бы непрерывным и не работал бы.
Терренс
В Ubuntu такого рода PATHизменения уже внесены в ~/.profileфайл, поэтому немного противоречиво делать подобные вещи в ~/.bashrc. Лучше ИМО, чтобы изменить код уже в ~/.profileслучае необходимости. В настоящее время ~/.profileфайл по умолчанию включает в себя эту строку:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Гуннар Хьялмарссон,
@GunnarHjalmarsson: Есть некоторые ситуации, которые отличают .profile и .bashrc. Файл .profile анализируется по оболочкам входа в систему, а не по подоболочкам. Но поскольку вам все равно нужно войти в систему, чтобы запустить подоболочку, это нормально, так как подоболочки будут наследовать $ PATH. Файл .bashrc не будет проанализирован оболочкой входа в систему, но будет проанализирован субоболочками. Разница возникает, когда у вас есть некоторые вещи, которые не являются потомками оболочки входа в систему (может быть, какой-то необычный скрипт автоматизации, который вызывает другие скрипты, такие как git commit hook) - что-либо в .profile не будет прочитано, поэтому они будут проигнорированы
slebetman
@slebetman: Да, и в случае с рабочим столом есть еще одно отличие, которое вы не упомянули: в отличие от этого ~/.bashrc, ~/.profileоно получено из диспетчера отображения, поэтому ~/.profileпри запуске программ из графической среды доступны только переменные, заданные параметром . И это происходит рано, так что это должно быть хорошо для процессов автозапуска для сеанса.
Гуннар Хьялмарссон

Ответы:

16

Напомним все, что упоминается в этом вопросе,

exportчасть

В exportлинии означает , что переменный , что вы объявляете после того , как будет доступно для дочерних процессов. Другими словами, процессы смогут получить доступ к переменной, объявленной после exportключевого слова, через среду оболочки. Итак, если вы сделали что-то подобное, export FOO="BAR"а затем получили изменения в своей оболочке, вы можете набрать $FOOи получить BAR.

PATHчасть

Линия пути такая же, как вы указали: она объявляет переменную, которая названа PATHдля среды оболочки. В среде bash PATHспециальное назначение - определить, где компьютер ищет программы. Это позволяет вводить пользовательские команды для сценариев, не вводя полный каталог. Обратите внимание, что PATH помечен для экспорта по умолчанию, поэтому эту строку не нужно переписывать. Это не больно, хотя.

$HOMEВ PATHпеременной

В начале пути, который назначен PATHпеременной, $HOMEобъявляется. Это означает, что компьютер будет в значительной степени захватывать сохраненное значение HOMEи вставлять его перед остальной частью строки при чтении.

:Между обоими путями

:Эквивалентна запятой в предложениях. Он просто разделяет три каталога. Без этих трех каталогов консоль не будет распознавать команды, которые она получает. Эти три места - это три каталога, которые чаще всего используются для хранения скриптов / командных файлов и поэтому должны быть доступны для терминала без необходимости записывать полный путь к файлу.

Странный
источник
Отличный ответ! «Строка экспорта означает, что переменная, которую вы объявляете после того, как она будет доступна для дочерних процессов» является родительской для этих дочерних процессов терминала, откуда я буду запускать команду?
Вадасамбар
5

PATHПеременная позволяет Баш знать , где искать исполняемые программы, поэтому если у вас есть скрипт или какой - либо другой исполняемый файл $HOME/.local/bin, изменения PATHпозволят вам набрать и запустить этот файл так же , как вы делаете с lsили df.

exportозначает только, что эта PATHпеременная также доступна для других программ, которые вы запускаете из bash.

Что касается : , это просто разделитель для каждого каталога. Это то же самое, что запятая в списке слов, не более того.

Сергей Колодяжный
источник