Ustawianie zmiennych środowiskowych z pliku par klucz / wartość
TL; DR: Jak wyeksportować zestaw par klucz / wartość z pliku tekstowego do środowiska powłoki?
Dla przypomnienia, poniżej znajduje się Oryginalna wersja pytania, z przykładami.
Piszę skrypt w bash, który parsuje pliki z 3 zmiennymi w określonym folderze, jest to jedna z nich:
MINIENTREGA_FECHALIMITE="2011-03-31"
MINIENTREGA_FICHEROS="informe.txt programa.c"
MINIENTREGA_DESTINO="./destino/entrega-prac1"
Ten plik jest przechowywany w ./ conf / prac1
Mój scenariusz minientrega.sh następnie przetwarza plik używając tego kodu:
cat ./conf/$1 | while read line; do
export $line
done
Ale kiedy execute minientrega.sh prac1
w wierszu poleceń nie ustawia zmiennych środowiskowych
Próbowałem również użyć source ./conf/$1
ale ten sam problem nadal dotyczy
Może jest na to jakiś inny sposób, po prostu potrzebuję użyć zmiennych środowiskowych pliku, który podaję jako argument mojego skryptu.
30 answers
Problem z twoim podejściem polega na tym, że export
W pętli while
dzieje się w sub powłoce, a te zmienne nie będą dostępne w bieżącej powłoce (powłoce nadrzędnej pętli while).
Dodaj export
polecenie w samym pliku:
export MINIENTREGA_FECHALIMITE="2011-03-31"
export MINIENTREGA_FICHEROS="informe.txt programa.c"
export MINIENTREGA_DESTINO="./destino/entrega-prac1"
Następnie należy pobrać plik w bieżącej powłoce używając:
. ./conf/prac1
Lub
source ./conf/prac1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 19:43:06
To może być pomocne:
export $(cat .env | xargs) && rails c
Powodem, dla którego tego używam jest to, że chcę przetestować .env
rzeczy w mojej konsoli rails.
Gabrielf wymyślił dobry sposób, aby utrzymać zmienne lokalne. To rozwiązuje potencjalny problem podczas przechodzenia od projektu do projektu.
env $(cat .env | xargs) rails
Przetestowałem to z bash 3.2.51(1)-release
Update:
Aby zignorować linie zaczynające się od #
, użyj tego (dzięki komentarza Pete ' a):
export $(grep -v '^#' .env | xargs)
I jeśli chcesz unset
wszystkich zmiennych zdefiniowanych w pliku, użyj tego:
unset $(grep -v '^#' .env | sed -E 's/(.*)=.*/\1/' | xargs)
Update:
Aby również obsługiwać wartości ze spacjami, użyj:
export $(grep -v '^#' .env | xargs -d '\n')
Na systemach GNU -- lub:
export $(grep -v '^#' .env | xargs -0)
Na systemach BSD.
From this answer you can auto-detect the OS with this:
export-env.sh
#!/bin/sh
## Usage:
## . ./export-env.sh ; $COMMAND
## . ./export-env.sh ; echo ${MINIENTREGA_FECHALIMITE}
unamestr=$(uname)
if [ "$unamestr" = 'Linux' ]; then
export $(grep -v '^#' .env | xargs -d '\n')
elif [ "$unamestr" = 'FreeBSD' ]; then
export $(grep -v '^#' .env | xargs -0)
fi
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-23 15:01:18
-o allexport
umożliwia eksportowanie wszystkich następujących definicji zmiennych. +o allexport
wyłącza tę funkcję.
set -o allexport
source conf-file
set +o allexport
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-24 09:09:58
set -a
. ./env.txt
set +a
If env.txt
is like:
VAR1=1
VAR2=2
VAR3=3
...
Objaśnienia - a jest równoważne allexport . Innymi słowy, każde przypisanie zmiennej w powłoce jest eksportowane do środowiska (do wykorzystania przez wiele procesów potomnych). Więcej informacji można znaleźć w zbiorze dokumentacji :
-a każda utworzona lub zmodyfikowana zmienna lub funkcja otrzymuje atrybut export i jest oznaczana do eksportu do środowiska kolejnych polecenia.
Użycie ' + 'zamiast' - ' powoduje wyłączenie tych opcji. Opcje mogą być również używane podczas wywoływania powłoki. Bieżący zestaw opcji można znaleźć w$ -.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-08 12:29:36
Znalazłem najbardziej skuteczny sposób to:
export $(xargs < .env)
Wyjaśnienie
Gdy mamy .env
Plik taki jak:
key=val
foo=bar
Run xargs < .env
will get key=val foo=bar
Więc dostaniemy {[5] } i to jest dokładnie to, czego potrzebujemy!
Ograniczenie
- nie obsługuje przypadków, w których wartości mają spacje. Polecenia takie jak env wytwarzają ten format. - @Shardj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-06 06:04:02
Opcja allexport
jest wymieniona w kilku innych odpowiedziach tutaj, dla których set -a
jest skrótem. Pozyskiwanie ... env jest naprawdę lepszy niż zapętlanie linii i eksportowanie, ponieważ pozwala na komentarze, puste linie, a nawet zmienne środowiskowe generowane przez polecenia. Ojej .bashrc obejmuje:
# .env loading in the shell
dotenv () {
set -a
[ -f .env ] && . .env
set +a
}
# Run dotenv on login
dotenv
# Run dotenv on every new directory
cd () {
builtin cd $@
dotenv
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 16:57:59
eval $(cat .env | sed 's/^/export /')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-07 10:35:47
Oto inne rozwiązanie sed
, które nie uruchamia evalu ani nie wymaga Rubiego:
source <(sed -E -n 's/[^#]+/export &/ p' ~/.env)
Dodaje eksport, zachowując komentarze w wierszach zaczynających się od komentarza.
.zawartość env
A=1
#B=2
Sample run
$ sed -E -n 's/[^#]+/export &/ p' ~/.env
export A=1
#export B=2
Okazało się to szczególnie przydatne przy konstruowaniu takiego pliku do ładowania w pliku systemd unit, Z EnvironmentFile
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-06 16:21:58
Podałem odpowiedź user4040650, ponieważ jest ona zarówno prosta, jak i pozwala na dodawanie komentarzy do pliku (tj. linii zaczynających się od#), co jest dla mnie bardzo pożądane, ponieważ można dodawać komentarze wyjaśniające zmienne. Tylko przepisywanie w kontekście pierwotnego pytania.
Jeśli skrypt zostanie wywołany zgodnie ze wskazaniem: minientrega.sh prac1
, to minientrega.sh może mieć:
set -a # export all variables created next
source $1
set +a # stop exporting
# test that it works
echo "Ficheros: $MINIENTREGA_FICHEROS"
Z dokumentacji zestawu wyodrębniono:
Ten budynek jest tak skomplikowany że zasługuje na własną część. set pozwala zmienić wartości opcji powłoki i ustawić parametry pozycyjne, lub wyświetlanie nazw i wartości powłoki zmienne.
Set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument ...] set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument ...]
Jeśli nie podano opcji lub argumentów, set wyświetla nazwy i wartości wszystkich powłok zmienne i funkcje, posortowane według aktualnych ustawień regionalnych, w format, który może być ponownie użyty jako wejście do Ustawienia lub zresetowania aktualnie ustawiane zmienne. Nie można zresetować zmiennych tylko do odczytu. W POSIX tryb, wyświetlane są tylko Zmienne powłoki.
Gdy podano opcje, ustawiają lub wyłączają atrybuty powłoki. Opcje, jeśli są określone, mają następujące znaczenia:
- Każda utworzona lub zmodyfikowana zmienna lub funkcja otrzymuje atrybut export i jest oznaczana do eksportu do środowiska kolejne polecenia.
I to też:
Użycie ' + 'zamiast' - ' powoduje wyłączenie tych opcji. Na opcje mogą być również używane podczas wywoływania powłoki. Obecny zestaw opcji można znaleźć w$ -.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-08 11:46:05
Poprawiam odpowiedź Silasa Paula
Eksportowanie zmiennych na podshell czyni je lokalnymi do polecenia.
(export $(cat .env | xargs) && rails c)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-21 20:37:00
Najkrótsza droga jaką znalazłem:
Twój .env
Plik:
VARIABLE_NAME="A_VALUE"
Wtedy po prostu
. ./.env && echo ${VARIABLE_NAME}
Bonus: ponieważ jest to krótki jednowersowy, jest bardzo przydatny w package.json
pliku
"scripts": {
"echo:variable": ". ./.env && echo ${VARIABLE_NAME}"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-28 10:56:39
SAVE=$(set +o | grep allexport) && set -o allexport && . .env; eval "$SAVE"
Spowoduje to zapisanie / przywrócenie oryginalnych opcji, niezależnie od tego, jakie mogą być.
Użycie set -o allexport
ma tę zaletę, że poprawnie pomija komentarze bez wyrażenia regularnego.
set +o
sam wyprowadza wszystkie bieżące opcje w formacie, który bash może później wykonać. Również przydatny: set -o
sam w sobie, wyświetla wszystkie bieżące opcje w przyjaznym dla człowieka formacie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-11 05:56:02
Nie do końca wiem, dlaczego i co przegapiłem, ale po przejściu przez większość odpowiedzi i porażce. Zdałem sobie z tego sprawę.plik env:
MY_VAR="hello there!"
MY_OTHER_VAR=123
Mógłbym po prostu to zrobić:
source .env
echo $MY_VAR
Wyjścia: Hello there!
Wydaje się działać dobrze w Ubuntu linux.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-06 06:41:42
Oto mój wariant:
with_env() {
(set -a && . ./.env && "$@")
}
W porównaniu z poprzednimi rozwiązaniami:
- Nie powoduje wycieku zmiennych poza zakres (wartości z {[2] } nie są narażone na wywołanie)
- nie pobiera
set
opcji - zwraca kod zakończenia wykonanego polecenia
- używa zgodnego z posix
set -a
- używa
.
zamiastsource
, aby uniknąć bashism - polecenie nie jest wywoływane, jeśli
.env
ładowanie nie powiedzie się
with_env rails console
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-22 14:24:38
Prostsze:
- Pobierz zawartość pliku
- Usuń puste linie (po prostu okryj oddzielone rzeczy)
- usuń wszelkie komentarze (wystarczy dodać kilka...)
- dodaj
export
do wszystkich wierszy -
eval
całość
eval $(cat .env | sed -e /^$/d -e /^#/d -e 's/^/export /')
Kolejna opcja (nie musisz uruchamiać eval
(dzięki @Jaydeep)):
export $(cat .env | sed -e /^$/d -e /^#/d | xargs)
Na koniec, jeśli chcesz, aby twoje życie było naprawdę łatwe, dodaj to do swojego ~/.bash_profile
:
function source_envfile() { export $(cat $1 | sed -e /^$/d -e /^#/d | xargs); }
(UPEWNIJ SIĘ, ŻE PRZEŁADOWAŁEŚ USTAWIENIA BASH!!! source ~/.bash_profile
lub.. po prostu zrób nową kartę / okno i problem rozwiązany) nazywasz to tak: source_envfile .env
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 12:36:23
Możesz użyć oryginalnego skryptu, aby ustawić zmienne, ale musisz wywołać go w następujący sposób (z samodzielną kropką):
. ./minientrega.sh
Również może być problem z podejściem cat | while read
. Polecam zastosować podejście while read line; do .... done < $FILE
.
Oto działający przykład:
> cat test.conf
VARIABLE_TMP1=some_value
> cat run_test.sh
#/bin/bash
while read line; do export "$line";
done < test.conf
echo "done"
> . ./run_test.sh
done
> echo $VARIABLE_TMP1
some_value
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 19:49:53
Bazując na innych odpowiedziach, oto sposób na eksport tylko podzbioru linii w pliku, w tym wartości ze spacjami takimi jak PREFIX_ONE="a word"
:
set -a
. <(grep '^[ ]*PREFIX_' conf-file)
set +a
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-09 00:44:25
Moje wymagania to:
- proste .plik env bez prefiksów
export
(dla zgodności z dotenv) - wartości pomocnicze w cudzysłowach: TEXT= "alpha bravo charlie"
- wspieranie komentarzy poprzedzonych # i pustymi liniami
- Uniwersalny Dla mac / BSD i linux / GNU
Pełna wersja robocza opracowana na podstawie powyższych odpowiedzi:
set -o allexport
eval $(grep -v '^#' .env | sed 's/^/export /')
set +o allexport
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-18 10:13:51
Pracuję z plikami docker-compose i .env
na Macu i chciałem zaimportować .env
do mojej powłoki bash( do testów), a "najlepszą" odpowiedzią było potknięcie się o następującą zmienną:
.env
NODE_ARGS=--expose-gc --max_old_space_size=2048
Rozwiązanie
Więc skończyłem używając eval
, i owijając moje ENV var defs pojedynczymi cudzysłowami.
eval $(grep -v -e '^#' .env | xargs -I {} echo export \'{}\')
Wersja Bash
$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
t=$(mktemp) && export -p > "$t" && set -a && . ./.env && set +a && . "$t" && rm "$t" && unset t
Jak to działa
- Utwórz plik tymczasowy.
- zapisuje wszystkie bieżące wartości zmiennych środowiskowych do pliku temp.
- umożliwia eksport wszystkich zadeklarowanych zmiennych w skrypcie sources do środowiska.
- przeczytaj
.env
plik. Wszystkie zmienne zostaną wyeksportowane do bieżącego środowiska. - wyłącza eksport wszystkich zadeklarowanych zmiennych w skrypcie sources do środowiska.
- odczytaj zawartość pliku tymczasowego. Każda linia miałby
declare -x VAR="val"
, który eksportowałby każdą ze zmiennych do środowiska. - Usuń plik tymczasowy.
- Wyłącz zmienną zawierającą Nazwę pliku temp.
Cechy
- zachowuje wartości zmiennych już ustawionych w środowisku
-
.env
może mieć komentarze -
.env
może mieć puste linie -
.env
nie wymaga specjalnego nagłówka ani stopki, jak w innych odpowiedziach (set -a
iset +a
) -
.env
nie require to haveexport
for every value - one-liner
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-20 22:17:23
Mam problemy z wcześniejszymi sugerowanymi rozwiązaniami:
- @ anubhava rozwiązanie sprawia, że pisanie przyjaznych dla Basha plików konfiguracyjnych jest bardzo irytujące bardzo szybko , a także-możesz nie chcieć zawsze eksportować swoją konfigurację.
- @ Silas Paul rozwiązanie łamie się, gdy masz zmienne, które mają spacje lub inne znaki, które dobrze działają w cytowanych wartościach, ale
$()
robi bałagan.
Oto moje rozwiązanie, które nadal jest dość straszne IMO-i nie rozwiązuje problem" export only to one child " rozwiązany przez Silasa (choć prawdopodobnie możesz go uruchomić w pod-powłoce, aby ograniczyć zakres):
source .conf-file
export $(cut -d= -f1 < .conf-file)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-28 09:53:19
Mój .env:
#!/bin/bash
set -a # export all variables
#comments as usual, this is a bash script
USER=foo
PASS=bar
set +a #stop exporting variables
Wywołanie:
source .env; echo $USER; echo $PASS
Odniesienie https://unix.stackexchange.com/questions/79068/how-to-export-variables-that-are-set-all-at-once
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 19:40:45
Jeśli env
obsługuje opcję -S
, można użyć nowych linii lub znaków specjalnych, takich jak \n
lub \t
(Zobacz env):
env -S "$(cat .env)" command
.env
przykład pliku:
KEY="value with space\nnewline\ttab\tand
multiple
lines"
Test:
env -S "$(cat .env)" sh -c 'echo "$KEY"'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-31 10:09:29
Najpierw Utwórz plik środowiskowy, który będzie miał wszystkie pary klucz-wartość środowisk jak poniżej i nazwij go jak chcesz w moim przypadku jego env_var.env
MINIENTREGA_FECHALIMITE="2011-03-31"
MINIENTREGA_FICHEROS="informe.txt programa.c"
MINIENTREGA_DESTINO="./destino/entrega-prac1"
Następnie Utwórz skrypt, który wyeksportuje wszystkie zmienne środowiskowe dla środowiska Pythona jak poniżej i nada mu nazwę export_env.sh
#!/usr/bin/env bash
ENV_FILE="$1"
CMD=${@:2}
set -o allexport
source $ENV_FILE
set +o allexport
$CMD
Ten skrypt pobierze pierwszy argument jako plik środowiskowy, a następnie wyeksportuje całą zmienną środowiskową w tym pliku, a następnie uruchomi polecenie po to.
Użycie:
./export_env.sh env_var.env python app.py
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-20 07:03:21
Modified from @ Dan Kowalczyk
Wstawiłem to ~/.bashrc
.
set -a
. ./.env >/dev/null 2>&1
set +a
Bardzo dobrze kompatybilny z wtyczką dotenv Oh-my-Zsh. (Jest Oh-my-bash, ale nie ma wtyczki dotenv.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-21 02:18:11
Używam tego:
source <(cat .env \
| sed -E '/^\s*#.*/d' \
| tr '\n' '\000' \
| sed -z -E 's/^([^=]+)=(.*)/\1\x0\2/g' \
| xargs -0 -n2 bash -c 'printf "export %s=%q;\n" "${@}"' /dev/null)
Pierwsze usunięcie komentarzy:
sed -E '/^\s*#.*/d'
Następnie konwersja do ograniczników null zamiast nowej linii:
tr '\n' '\000'
Następnie zastąpienie equal przez null:
sed -z -E 's/^([^=]+)=(.*)/\1\x0\2/g'
Następnie drukowanie par do poprawnego quoted Bash exports (używając bash printf dla %q):
xargs -0 -n2 bash -c 'printf "export %s=%q;\n" "${@}"' /dev/null
/ Align = "left" /
Powinno działać dla prawie wszystkich przypadków ze wszystkimi znakami specjalnymi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-16 12:43:56
Natknąłem się na ten wątek, gdy próbowałem ponownie użyć Dockera --env-file
w powłoce. ich format nie jest kompatybilny z bashem, ale jest prosty: name=value
, bez cytowania, bez zastępowania. Ignorują również puste linie i komentarze #
.
Nie mogłem do końca uzyskać zgodności z posix, ale oto jeden, który powinien działać w powłokach podobnych do Basha (testowane w zsh na OSX 10.12.5 i bash na Ubuntu 14.04):
while read -r l; do export "$(sed 's/=.*$//' <<<$l)"="$(sed -E 's/^[^=]+=//' <<<$l)"; done < <(grep -E -v '^\s*(#|$)' your-env-file)
It nie zajmie się trzema przypadkami w przykładzie z Docs linked powyżej:
bash: export: `123qwe=bar': not a valid identifier
bash: export: `org.spring.config=something': not a valid identifier
Nie będzie obsługiwał składni passthrough (a bare
FOO
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-23 20:55:25
Białe spacje w wartości
Jest wiele świetnych odpowiedzi tutaj, ale znalazłem je wszystkie brakuje wsparcia dla białej spacji w wartości:
DATABASE_CLIENT_HOST=host db-name db-user 0.0.0.0/0 md5
Znalazłem 2 rozwiązania, które działają z takimi wartościami z obsługą pustych linii i komentarzy.
Jeden oparty na sed i @ javier-buzzi odpowiedź :
source <(sed -e /^$/d -e /^#/d -e 's/.*/declare -x "&"/g' .env)
I jeden z czytaną linią w pętli na podstawie @john1024 odpowiedz
while read -r line; do declare -x "$line"; done < <(egrep -v "(^#|^\s|^$)" .env)
Tutaj klucz jest w użyciu declare -x
i umieszczenie linii w podwójnym cytaty. Nie wiem dlaczego, ale po sformatowaniu kodu pętli do wielu linii nie zadziała - nie jestem programistą Basha, po prostu zjadłem je razem, nadal jest to dla mnie Magia :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 06:52:43
Spróbuj czegoś takiego
for line in `cat your_env_file`; do if [[ $line != \#* ]];then export $line; fi;done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-26 12:55:51
Mój .plik env wygląda następująco:
DATABASE_URI="postgres://sa:***@localhost:5432/my_db"
VARIABLE_1="SOME_VALUE"
VALIABLE_2="123456788"
Używając metod @ henke , wyeksportowana wartość kończy się znakiem cudzysłowu "
"postgres://sa:***@localhost:5432/my_db"
"SOME_VALUE"
"123456788"
Ale chcę, aby wyeksportowana wartość zawierała tylko:
postgres://sa:***@localhost:5432/my_db
SOME_VALUE
123456788
Aby to naprawić, edytuję polecenie, aby usunąć cudzysłowy:
export $(grep -v '^#' dev.env | tr --delete '"' | xargs -d '\n')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-19 13:44:47