Під час налаштування змінної в .bashrc
, чи слід це використовувати?
export VAR=value
Або цього буде достатньо?
VAR=value
Яка саме різниця (якщо така є)?
Під час налаштування змінної в .bashrc
, чи слід це використовувати?
export VAR=value
Або цього буде достатньо?
VAR=value
Яка саме різниця (якщо така є)?
Відповіді:
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
команди) змінні, встановлені в сценарії, зберігаються протягом життя оболонки.
PS1
є поганим прикладом змінної, яку потрібно експортувати як змінну середовища. Це має значення лише для дитячих процесів, які є оболонками, і це по-різному інтерпретується різними оболонками (наприклад, удар і тире). Найкраща практика - просто встановити його як звичайну змінну оболонки в .bashrc
. Кращі приклади змінних середовища включають в себе HOME
, PATH
, EDITOR
і т.д.
Обидва, здається, працюють просто чудово, але використання експорту забезпечить зміну доступною для підрозділів та інших програм. Щоб перевірити це, спробуйте це.
Додайте ці два рядки до файлу .bashrc
TESTVAR="no export"
export MYTESTVAR="with export"
Потім відкрийте нову оболонку.
Запуск echo $TESTVAR
і echo $MYTESTVAR
покаже вміст кожної змінної. Тепер всередині цієї самої оболонки видаліть ці два рядки з вашого файлу .bashrc і запустіть, bash
щоб запустити нижню частину.
Біг echo $TESTVAR
матиме порожній вихід, але біг echo $MYTESTVAR
відображатиметься "з експортом"