@Neerav Proszę przyjąć inną odpowiedź. To jest znacznie lepsze rozwiązanie.
coderDude
Odpowiedzi:
64
source tmp.txt
export a b c
./child ...
Sądząc po drugim pytaniu, nie chcesz na stałe kodować nazw zmiennych:
source tmp.txt
export $(cut -d=-f1 tmp.txt)
Sprawdź to:
$ source tmp.txt
$ echo "$a $b $c"123 hello world one more variable
$ perl -E 'say "@ENV{qw(a b c)}"'
$ export $(cut -d=-f1 tmp.txt)
$ perl -E 'say "@ENV{qw(a b c)}"'123 hello world one more variable
set -apowoduje, że zmienne¹ zdefiniowane odtąd są automatycznie eksportowane. Jest dostępny w dowolnej powłoce podobnej do Bourne'a. .jest standardową nazwą Bourne dla tego sourcepolecenia, więc preferuję ją ze względu na przenośność ( sourcepochodzi z cshi jest teraz dostępna w większości nowoczesnych powłok podobnych do Bourne'a, w tym bashchociaż (czasami z nieco innym zachowaniem).
W powłokach POSIX można także użyć set -o allexportbardziej opisowego alternatywnego sposobu napisania ( set +o allexportrozbrojenia).
¹ W bash, uważaj, że powoduje to również eksport wszystkich funkcji zadeklarowanych, gdy allexportjest włączone, do środowiska (ponieważ BASH_FUNC_myfunction%%zmienne środowiskowe, które są następnie importowane przez wszystkie bashpowłoki działają w tym środowisku, nawet gdy działają jako sh).
@RalfFriedl to powinno działać, dlaczego nie? Nie jest to zbyt eleganckie, a pozyskiwanie set -abyłoby o wiele prostsze, ale tak naprawdę działa.
terdon
To jest kruche. Nie pozwala na komentarze w pliku wejściowym, nie obsługuje poprawnie wartości zmiennych cytowanych i zawodzi w przypadku zmiennych wieloliniowych. To prawda, że nie mam wielu zmiennych wieloliniowych, ale regularnie używam komentarzy i często muszę używać cudzysłowów dla wartości zmiennych.
.env
plików po przejściucd
do katalogu.Odpowiedzi:
Sądząc po drugim pytaniu, nie chcesz na stałe kodować nazw zmiennych:
Sprawdź to:
źródło
grep
aby pominąć komentarze:export $(grep --regexp ^[A-Z] tmp.txt | cut -d= -f1)
set -a
powoduje, że zmienne¹ zdefiniowane odtąd są automatycznie eksportowane. Jest dostępny w dowolnej powłoce podobnej do Bourne'a..
jest standardową nazwą Bourne dla tegosource
polecenia, więc preferuję ją ze względu na przenośność (source
pochodzi zcsh
i jest teraz dostępna w większości nowoczesnych powłok podobnych do Bourne'a, w tymbash
chociaż (czasami z nieco innym zachowaniem).W powłokach POSIX można także użyć
set -o allexport
bardziej opisowego alternatywnego sposobu napisania (set +o allexport
rozbrojenia).¹ W
bash
, uważaj, że powoduje to również eksport wszystkich funkcji zadeklarowanych, gdyallexport
jest włączone, do środowiska (ponieważBASH_FUNC_myfunction%%
zmienne środowiskowe, które są następnie importowane przez wszystkiebash
powłoki działają w tym środowisku, nawet gdy działają jakosh
).źródło
Po prostu zrób:
źródło
set -a
byłoby o wiele prostsze, ale tak naprawdę działa.