setwyświetla także funkcje i zmienne systemowe, takie jak BASH_VERSION
glenn jackman,
Twoje pytanie jest niejasne. Czy to jest fragment setwyników, które wyświetlasz? Jeśli tak, to nie bashjest. Czy chcesz wyeksportować wszystkie aktualnie ustawione zmienne, w tym specjalne zmienne powłoki? Czy tylko te 3 zmienne jak w export a b c?
Stéphane Chazelas,
export ${!T*}wyeksportuje dowolny zdefiniowany parametr, którego nazwa zaczyna się od T. Niestety wydaje się, że nie ma sposobu na łatwe wygenerowanie listy wszystkich zdefiniowanych parametrów.
chepner
Odpowiedzi:
72
Przed ustawieniem zmiennych uruchom następujące polecenie:
set-a
strona podręcznika:
-a
Gdy ta opcja jest włączona, atrybut eksportu należy ustawić dla każdej zmiennej, której przypisanie jest wykonywane;
Teraz musimy wyeksportować te zmienne, ale xargs nie może tego zrobić, ponieważ forksuje proces potomny, eksport musi być uruchomiony w ramach bieżącego procesu. echo "export" ...zbuduj polecenie, które chcemy, a następnie użyj ``, aby je uruchomić. To wszystko: p.
Witamy w U&L SE. Może możesz edytować swój post i wyjaśnić.
Archemar
1
Zakładanie, że nazwy zmiennych środowiskowych będą składać się wyłącznie z az i AZ, jest niepoprawne. Zazwyczaj zawierają również podkreślenia i cyfry, więc wzór byłby taki [a-zA-Z_][a-zA-Z0-9_]*. Istnieją pewne odmiany tego w zależności od używanej powłoki, ale jest to bezpieczne / przenośne podejście.
Chris Johnson
Dobry punkt @ChrisJohnson - zaktualizowano!
Wil Moore III
3
Możesz exportprzejść do nazwy zmiennej poprzez awki evalwynikowy wynik:
printenvwypisuje zmienne, które są już wyeksportowane. To również nie będzie działać poprawnie, jeśli istnieją zmienne zawierające znaki nowego wiersza.
Stéphane Chazelas,
2
Działa to, jeśli twoja powłoka jest bash (możliwe, że również inne powłoki)
export >/my/env/var/file
twój nowy plik będzie zawierał zrzut wszystkich aktualnie zdefiniowanych zmiennych ... z wpisami takimi jak
set
wyświetla także funkcje i zmienne systemowe, takie jak BASH_VERSIONset
wyników, które wyświetlasz? Jeśli tak, to niebash
jest. Czy chcesz wyeksportować wszystkie aktualnie ustawione zmienne, w tym specjalne zmienne powłoki? Czy tylko te 3 zmienne jak wexport a b c
?export ${!T*}
wyeksportuje dowolny zdefiniowany parametr, którego nazwa zaczyna się odT
. Niestety wydaje się, że nie ma sposobu na łatwe wygenerowanie listy wszystkich zdefiniowanych parametrów.Odpowiedzi:
Przed ustawieniem zmiennych uruchom następujące polecenie:
strona podręcznika:
Aby wyłączyć tę opcję, uruchom
set +a
później.Przykład:
Gdzie
environment
zawiera:źródło
function example(){ echo good; }; export -f example
Najpierw pobierz wszystkie ustawione zmienne środowiskowe:
(set -o posix ; set)
Odwołanie: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-baUzyskaj wszystkie nazwy zmiennych środowiskowych, oddzielone spacją:
awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}'
Odwołanie: awk-Drukowanie wartości kolumny bez nowego wiersza i dodanie przecinka oraz https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- awk-commandTeraz musimy wyeksportować te zmienne, ale xargs nie może tego zrobić, ponieważ forksuje proces potomny, eksport musi być uruchomiony w ramach bieżącego procesu.
echo "export" ...
zbuduj polecenie, które chcemy, a następnie użyj ``, aby je uruchomić. To wszystko: p.źródło
[a-zA-Z_][a-zA-Z0-9_]*
. Istnieją pewne odmiany tego w zależności od używanej powłoki, ale jest to bezpieczne / przenośne podejście.Możesz
export
przejść do nazwy zmiennej poprzezawk
ieval
wynikowy wynik:źródło
printenv
wypisuje zmienne, które są już wyeksportowane. To również nie będzie działać poprawnie, jeśli istnieją zmienne zawierające znaki nowego wiersza.Działa to, jeśli twoja powłoka jest bash (możliwe, że również inne powłoki)
twój nowy plik będzie zawierał zrzut wszystkich aktualnie zdefiniowanych zmiennych ... z wpisami takimi jak
następnie, aby podnieść bieżącą powłokę ze wszystkimi tymi zagadnieniami env vars
źródło