Załóżmy, że mam ten skrypt
export.bash :
#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"
Kiedy wykonuję skrypt i próbuję uzyskać do niego dostęp $VAR
, nie otrzymuję żadnej wartości!
echo $VAR
Czy jest jakiś sposób na uzyskanie dostępu do pliku$VAR
poprzez wykonanie export.bash bez jego pozyskiwania?
bash
shell
unix
environment-variables
tarrsalah
źródło
źródło
source
alboeval
albo ...)man source
nie będzie działać, ponieważsource
jest wbudowany w bash, musisz uruchomićhelp source
Odpowiedzi:
Szybka odpowiedź: nie
Istnieje jednak kilka możliwych obejść.
Najbardziej oczywistym, o którym już wspomniałeś, jest użycie
source
lub.
wykonanie skryptu w kontekście powłoki wywołującej:Innym sposobem jest użycie skryptu zamiast ustawiania zmiennej środowiskowej, komendy drukowania, które ustawią zmienną środowiskową:
Trzecim podejściem jest posiadanie skryptu, który wewnętrznie ustawia zmienne środowiskowe, a następnie wywołuje określone polecenie w tym środowisku:
To ostatnie podejście może być całkiem użyteczne, chociaż jest niewygodne do użytku interaktywnego, ponieważ nie daje ustawień w bieżącej powłoce (z wszystkimi innymi ustawieniami i historią, którą zbudowałeś).
źródło
Aby najpierw wyeksportować zmienną VAR, najbardziej logicznym i najwyraźniej działającym sposobem jest źródło zmiennej:
lub
Teraz, gdy echo z głównej powłoki działa
Zresetujemy teraz VAR
Teraz wykonamy skrypt, aby pobrać zmienną, a następnie ją rozbroić:
kod: cat test-export.sh
Oto jeden sposób
UWAGA: Eksport jest ograniczony do skryptu, który wykonuje eksport w głównej konsoli - jeśli chodzi o zadanie crona, dodałbym go tak jak w konsoli jak poniżej ... dla części poleceń wciąż wątpliwej: oto jak byś uruchom z powłoki:
W wierszu polecenia (o ile export.bash ma wiele wartości echa)
cat v1.sh
Teraz, pod warunkiem, że jest to do użytku - możesz udostępnić zmienne dla swoich skryptów w dowolnym momencie, wykonując alias bash:
dodaj to do swojego .bashrc
źródło pliku bashrc i możesz zrobić jak wyżej w dowolnym momencie ...
W każdym razie wracając do reszty…
Dzięki temu jest on dostępny na całym świecie, a następnie wykonuje skrypt.
po prostu uruchom echo, a następnie uruchom eksport na echu!
eksport kotów. bash
Teraz w ramach skryptu lub uruchomionej konsoli:
Próbować:
Wiele wartości, o ile wiesz, czego oczekujesz w innym skrypcie przy użyciu powyższej metody:
eksport kotów. bash
cat test-export.sh
Teraz wyniki
i ostatnia końcowa aktualizacja do automatycznego przypisania, przeczytaj ZMIENNE:
Skrypt: cat test-export.sh
źródło
Wykonać
Wszelkie zmienne, które następnie pobierzesz z pliku, zostaną wyeksportowane do powłoki.
Po zakończeniu uruchom. Spowoduje to wyłączenie trybu allexport.
źródło
bash source export
w GoogleZnaleziono ciekawy i schludny sposób na eksport zmiennych środowiskowych z pliku:
w
env.vars
:skrypt testowy:
źródło
Kolejne obejście, które, w zależności od przypadku, może być przydatne: tworzenie kolejnego basha, który dziedziczy eksportowaną zmienną. Jest to szczególny przypadek odpowiedzi @Keith Thompson, wszystkie te wady.
export.bash:
Teraz:
źródło
. ./export.bash
bash
jako element potomny bieżącej powłoki. A ponieważVAR
był wcześniej eksportowany, to wywołanie obejmie zmienną. Oczywiście, jeśli wpiszesz zgaśnie. Czy sprawdziłeś?exit
VAR
Odpowiedź brzmi: nie, ale dla mnie zrobiłem następujące
skrypt: myExport
alias w moim .bashrc
Nadal go pozyskujesz, ale może w ten sposób jest bardziej użyteczny i interesujący dla kogoś innego.
źródło
Może możesz napisać funkcję w ~ / .zshrc, ~ / .bashrc.
Ze względu na użycie zmiennej na zewnątrz można uniknąć zapisu pliku skryptu.
źródło