Який найкращий спосіб встановити змінну середовища в .bashrc?


11

Під час налаштування змінної в .bashrc, чи слід це використовувати?

export VAR=value

Або цього буде достатньо?

VAR=value

Яка саме різниця (якщо така є)?

Відповіді:


16

Найкращий спосіб

export VAR=value

Різниця

Робимо

VAR=value

встановлює лише змінну протягом тривалості сценарію ( .bashrcу цьому випадку). У дочірніх процесах (якщо такі є) сценарію не буде визначено VAR, і як тільки сценарій завершиться, VARйого не буде.

export VAR=value

явно додає VARдо списку змінних, які передаються дочірнім процесам. Хочете спробувати? Відкрийте оболонку, зробіть

PS1="foo > "
bash --norc

Нова оболонка отримує підказку за замовчуванням. Якщо замість цього ви робите щось на кшталт

export PS1="foo > "
bash --norc

нова оболонка отримує підказку, яку ви просто встановили.

Оновлення: як зазначає Іен Келінг нижче, змінні, встановлені у .bashrcзбереженій оболонці .bashrc. Більш загально, коли оболонка джерела скрипту (за допомогою source scriptnameкоманди) змінні, встановлені в сценарії, зберігаються протягом життя оболонки.


1
"встановлює лише змінну протягом тривалості сценарію (.bashrc в цьому випадку)" Це неправдиво / вводить в оману. Змінні, встановлені таким чином, зберігаються в інтерактивній оболонці, що читає .bashrc.
Іен Келінг

PS1є поганим прикладом змінної, яку потрібно експортувати як змінну середовища. Це має значення лише для дитячих процесів, які є оболонками, і це по-різному інтерпретується різними оболонками (наприклад, удар і тире). Найкраща практика - просто встановити його як звичайну змінну оболонки в .bashrc. Кращі приклади змінних середовища включають в себе HOME, PATH, EDITORі т.д.
Ентоні Geoghegan

10

Обидва, здається, працюють просто чудово, але використання експорту забезпечить зміну доступною для підрозділів та інших програм. Щоб перевірити це, спробуйте це.

Додайте ці два рядки до файлу .bashrc

TESTVAR="no export"
export MYTESTVAR="with export"

Потім відкрийте нову оболонку.

Запуск echo $TESTVARі echo $MYTESTVARпокаже вміст кожної змінної. Тепер всередині цієї самої оболонки видаліть ці два рядки з вашого файлу .bashrc і запустіть, bashщоб запустити нижню частину.

Біг echo $TESTVARматиме порожній вихід, але біг echo $MYTESTVARвідображатиметься "з експортом"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.