3

Я знаю, что могу установить переменную, «экспортировать» переменные и поместить оператор псевдонима в мой файл .bash_rc.

Так:

Когда я просто устанавливаю переменную, она просто длится для этого сеанса и не видна другим сеансам, правильно?
Затем, когда я экспортирую его, он виден другим сеансам оболочки (правда, это только для других «новых» сеансов?
Могут ли существующие сессии перезагрузиться или что-нибудь получить?)
Наиболее критично, что этот экспорт «остается» после перезагрузки?
Или это когда файл .bashrc приходит для «действительно» постоянной установки переменных в будущем?
Наконец какие-нибудь известные различия между Ubuntu и Mac по этому поводу?

4 ответа4

3

Вы правы насчет .bashrc . При начальной загрузке ОС ничего не знает о переменных среды, кроме того, что она читает в .profilerc , .bashrc , .inputrc и т.д. И все, что export редактируется только для текущего сеанса, если не помещено в один из этих файлов.

Если значения добавлены в один из этих файлов и вы хотите, чтобы он вступил в силу немедленно, выполните:

source .bashrc

или же:

. /etc/bashrc

так далее...


Изменить (добавив из комментариев @ThomasAndrews):

Однако это только меняет переменные env для текущего сеанса (окна терминала), в котором вы его выполняете. Ключом к пониманию является осознание того, что переменные среды наследуются от родительских процессов к дочернему процессу во время запуска дочернего процесса.

1

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

$ echo $0
-bash

Теперь проверьте страницы руководства для вашей оболочки:

$ man bash
<man pages>

Прокрутите вниз до нижней части man-страницы, которая только что загрузилась, и найдите раздел FILES. Обратите внимание, что для разных типов оболочек существуют разные файлы инициализации. Файлы и расположение будут зависеть от используемой вами оболочки.

0

Вы можете добавить оператор экспорта в свой ПРОФИЛЬ ( http://www.hot.ee/airm/linux/BLFS6.3/postlfs/profile.html ).

Что-то вроде:

echo 'export PATH=/usr/local/my/bin:$PATH' >> ~/.profile
0

В * nix переменные окружения относятся к отдельным процессам. Дочерние процессы наследуют значения переменных среды родительского процесса во время запуска дочернего процесса.

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

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

Как правило, если вы хотите установить переменную окружения для каждого запускаемого вами процесса, вы помещаете ее в свой сценарий входа в систему, например .bash_profile (если bash - это ваша оболочка.)

(Файл .bashrc загружается с каждой оболочкой, которую вы можете захотеть или не захотите - если вы вручную задали другое значение и затем запустили «bash», хотите ли вы .bashrc переопределить ваше новое значение? .Bash_profile получает звонил с логином. Любой из них может быть правильным местом для размещения переменной среды.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .