Відповіді:
Це уривок зі сторінки чоловіка Баша:
export [-fn] [name [= word]] ...
export -p
Надані імена позначені для автоматичного експорту в середовище згодом виконаних команд. Якщо параметр -f заданий, імена відносяться до функцій ...
Якщо вам потрібна лише змінна в поточному середовищі, не потрібно використовувати експорт.
var=value
Редагувати:
Без експорту: лише поточне середовище. З експортом: поточне середовище та дошкільне середовище.
Ось демонстрація впливу експорту на наявність змінної у дочірньому середовищі та те, що зміни у дочірньому середовищі не впливають на батьків:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Після першого відлуння - сигналу ( echo "parent..."
) ви бачите «123» і «456» , тому що , як var1
і var2
активні в поточній середовищі. Ви не бачите значення, var3
оскільки воно ще не встановлено.
Після рядка, який починається, " var3=...
" ви не бачите значення, var1
оскільки воно не було експортовано. Ви робите бачите значення , var2
оскільки вона була експортована. Ви бачите значення , var3
тому що він був встановлений для дитини середовища тільки .
( bash -c
еквівалентно запуску скрипта зі змістом аргументу до -c
параметра. Сценарій або інший виконуваний файл або, в цьому випадку, аргумент, щоб bash -c
стати дочіркою поточного середовища, в результаті чого, звичайно, є дитина батьків.)
У "скрипті" значення змінної змінюються. Тепер він виводить ці нові значення.
Після закінчення "скрипту" виконання повертається до батьківського середовища (командний рядок у цьому випадку). Після останнього відлуння ви бачите початкові значення, оскільки зміни, внесені в дочірнє середовище, не впливають на батьків.
export
- зробити змінні доступними для цих дочірніх середовищ.
Ти це кажеш
Я завжди використовую команду експорту для встановлення змінної середовища
До того, як ви це зробили, це здається, що ви насправді намагаєтеся запитати, як зробити, щоб екологічна змінна зберігалася. Для цього потрібно буде розмістити export VAR="foo"
заяву у вашому файлі $ HOME / .bash_profile (якщо ви використовуєте bash). Якщо ви хочете, щоб змінна середовище зберігалася для всіх користувачів, окрім root, додайте її до / etc / profile. Якщо ви хочете, щоб його додали і для кореневого користувача, встановіть його в /root/.bash_profile.
Це буде працювати для всіх оболонок входу, де bash - це оболонка вибору. Для оболонок без входу потрібно використовувати .bashrc. Я не маю жодної ідеї для інших снарядів: D
експорт - це найпростіший спосіб зробити це, то чому б не залишити його при цьому?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
Програма executethisprogram
НЕ буде знати значення змінної FOO
. З іншого боку, при використанні: FOO=BAR; export FOO; executethisprogram
Програма executethisprogram
дізнається значення змінної FOO
.
export FOO
це команда, що позначає змінну, FOO
щоб вона могла отримати доступ до дочірніх процесів оточення, в якій команда була видана. Цей батько може бути сценарієм або інтерактивною оболонкою.
Ви також можете зробити щось подібне:
VAR=val application
Наприклад:
LANG=C ls --help
вихід англійською мовою.
LANG=pl_PL ls --help
вихід польською мовою (за наявності).
Раніше в sh ви не могли здійснити експорт VAL = val. Вам довелося
VAL=val; export VAL
ls
наприклад), не впливаючи на значення цієї змінної у поточному (батьківському) середовищі.
ls
є дитиною процесу, з якого він був запущений. Якщо я набираю ls
в командному рядку, інтерактивна оболонка є батьківською і ls
є дочірньою. Якщо у мене є сценарій, який використовує, ls
то сценарій є батьківським і ls
є дочірньою.