Як експортувати встановлені змінні, всі відразу?


39

setкоманда відображає всі локальні змінні, як показано нижче. Як я можу експортувати ці змінні відразу?

>set
a=123
b="asd asd"
c="hello world"

що ви маєте на увазі експорт відразу? ви можете використовувати напівколонки для визначення в одному рядку ... як a = 123; b = "asd asd"; c = "привіт світ"
Raza


2
setтакож відображає функції та системні змінні, такі як BASH_VERSION
glenn jackman

Ваше питання незрозуміле. Це уривок setвиводу, який ви показуєте? Якщо так, то це не так bash. Ви хочете експортувати всю встановлену в даний час змінну, включаючи спеціальні змінні оболонки? Або лише ті 3 змінні, як у export a b c?
Stéphane Chazelas

export ${!T*}експортує будь-який визначений параметр, з якого починається ім'я T. На жаль, не здається, що легко створити список усіх визначених параметрів.
чепнер

Відповіді:


72

Перед встановленням змінних виконайте таку команду:

set -a 

сторінка man:

-a
Коли цей параметр увімкнено, для кожної змінної, якій виконується призначення, встановлюється атрибут експорту;

Щоб вимкнути цю опцію, запустіть її set +aзгодом.

Приклад:

set -a
. ./environment
set +a

Де environmentміститься:

FOO=BAR
BAS='quote when using spaces'

13
Це потрібно ввімкнути перед присвоєнням змінним. Це не робить нічого для раніше призначених змінних.
чепнер

1
@chepner, Дякую, я забув згадати це !!
нітін

Це також автоматично експортує функції так само, якfunction example(){ echo good; }; export -f example
Олівер I,

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. Спочатку знайдіть усі встановлені змінні середовища: (set -o posix ; set) Довідка: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-ba

  2. Отримати всі назви змінних середовища, розділені пробілом: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Довідка: значення стовпця awk-Printing без нового рядка та додавання коми та https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- awk-командування

  3. Тепер нам потрібно експортувати ці змінні, але xargs не може цього зробити, оскільки він forks дочірнього процесу, експорт повинен запускатися під поточним процесом. echo "export" ...побудуємо потрібну нам команду, а потім використовуємо `` для її запуску. Ось і все: с.


Вітаємо з U&L SE. Можливо, ви можете відредагувати свою публікацію і дати пояснення.
Архемар

1
Неправильно вважати, що назви змінних середовищ будуть складатися виключно з az та AZ. Вони зазвичай включають також підкреслення та цифри, тому шаблон буде таким [a-zA-Z_][a-zA-Z0-9_]*. На підставі оболонки, яку ви використовуєте, є деякі варіанти, але це безпечний / портативний підхід.
Кріс Джонсон

Хороша точка @ChrisJohnson - оновлено!
Віл Мур III

3

Ви можете додати exportдо назви змінної через awkі evalотриманий результат:

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenvдрукує змінні, які вже експортуються. Це також не працює належним чином, якщо є змінні, що містять символи нового рядка.
Стефан Шазелас

2

Це спрацьовує, якщо ваша оболонка забита (можливо, і інші оболонки)

export > /my/env/var/file

ваш новий файл буде містити дамп усіх поточно визначених змінних ... з такими записами

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

потім підключити поточну оболонку з усіма проблемами env vars

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