Jestem trochę nowy w Linuksie i zdarza mi się wykonywać niektóre polecenia na ślepo, aby załatwić sprawę. Pomyślałem, że nie będzie to marnotrawstwo zadawania tego typu pytań, bo więcej nowych osób będzie miało o nich regularną wiedzę.
Niedawno zacząłem pracować z Jenkinsem , a potem musiałem użyć tego export
polecenia, aby uruchomić archiwum wojenne Jenkinsa . Musiałem więc wiedzieć, co export
ogólnie robi polecenie i dlaczego musimy uruchamiać to polecenie podczas uruchamiania Jenkinsa (po ustawieniu domu Jenkinsa).
Dzięki!
shell
unix
command
environment-variables
Chathura Kulasinghe
źródło
źródło
Odpowiedzi:
export
insh
i powiązanych powłokach (takich jakbash
) oznacza zmienną środowiskową, która ma zostać wyeksportowana do procesów potomnych, tak aby dziecko je dziedziczyło.export
jest zdefiniowane w POSIX :źródło
Myślę, że wychodzisz z tła systemu Windows. Więc zestawię je ze sobą (jestem też trochę nowy w Linuksie). Znalazłem odpowiedź użytkownika na mój komentarz, która była przydatna w rozwiązywaniu problemów.
W systemie Windows zmienna może być trwała lub nie. Termin zmienna środowiskowa obejmuje zmienną ustawioną w powłoce cmd za pomocą polecenia SET, a także wtedy, gdy zmienna jest ustawiana w interfejsie GUI systemu Windows, a zatem jest umieszczana w rejestrze i staje się widoczna w nowych oknach cmd. np. dokumentacja dla polecenia set w systemie Windows https://technet.microsoft.com/en-us/library/bb490998.aspx „Wyświetla, ustawia lub usuwa zmienne środowiskowe. Używane bez parametrów, set wyświetla bieżące ustawienia środowiska”. W Linuksie set nie wyświetla zmiennych środowiskowych, wyświetla zmienne powłoki, których nie wywołuje / nie odwołuje się do zmiennych środowiskowych. Ponadto Linux nie używa set do ustawiania zmiennych (poza parametrami pozycyjnymi i opcjami powłoki, które wyjaśniam na końcu jako uwaga), tylko do ich wyświetlania, a nawet wtedy tylko do wyświetlania zmiennych powłoki. Windows używa set do ustawiania i wyświetlania np. Set a = 5, linux tego nie robi.
W Linuksie myślę, że można by stworzyć skrypt, który ustawia zmienne podczas startu, np.
/etc/profile
Lub w/etc/.bashrc
innym przypadku, nie są one trwałe. Są przechowywane w pamięci RAM.W Linuksie istnieje rozróżnienie między zmiennymi powłoki i zmiennymi środowiskowymi. W systemie Linux zmienne powłoki znajdują się tylko w bieżącej powłoce, a zmienne środowiskowe znajdują się w tej powłoce i we wszystkich powłokach potomnych.
Możesz przeglądać zmienne powłoki za pomocą
set
polecenia (choć zauważ, że w przeciwieństwie do systemu Windows, zmienne nie są ustawiane w systemie Linux za pomocą polecenia set).set -o posix; set
(zrobienie tego set -o posix raz jako pierwsze pomaga nie wyświetlać zbyt wielu niepotrzebnych rzeczy). Więcset
wyświetla zmienne powłoki.Za pomocą
env
polecenia można przeglądać zmienne środowiskowezmienne powłoki są ustawiane za pomocą np. just
a = 5
zmienne środowiskowe są ustawiane podczas eksportu, eksport również ustawia zmienną powłoki
Tutaj widzisz zmienną powłoki zzz ustawioną na zzz = 5 i widzisz, że jest wyświetlana podczas działania,
set
ale nie jest wyświetlana jako zmienna środowiskowa.Tutaj widzimy zestaw yyy z eksportem, więc jest to zmienna środowiskowa. I zobacz, jak pokazuje się zarówno pod zmiennymi powłoki, jak i zmiennymi środowiskowymi
$ zzz=5 $ set | grep zzz zzz=5 $ env | grep zzz $ export yyy=5 $ set | grep yyy yyy=5 $ env | grep yyy yyy=5 $
inne przydatne wątki
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Uwaga - jedną kwestią, która trochę się rozwija i jest nieco poprawiająca to, co napisałem, jest to, że w linux bash, 'set' może być używane do ustawiania "parametrów pozycyjnych" i "opcji / atrybutów powłoki", i technicznie oba to są zmienne, chociaż strony podręcznika mogą ich nie opisywać jako takie. Ale nadal, jak wspomniano, set nie ustawi zmiennych powłoki ani zmiennych środowiskowych). Jeśli to zrobisz
set asdf
, ustawia $ 1 na asdf, a jeśliecho $1
widzisz asdf. Jeśli zrobiszset a=5
nie ustawi zmiennej a równej 5. Ustawi parametr pozycyjny $ 1 równy łańcuchowi „a = 5”. Więc jeśli kiedykolwiek widziałeś set a = 5 w Linuksie, to prawdopodobnie błąd, chyba że ktoś faktycznie chciał, aby łańcuch a = 5, w 1 $. Inną rzeczą, którą zestaw linux może ustawić, są opcje / atrybuty powłoki. Jeśli ustawisz -o, zobaczysz ich listę. Możesz na przykładset -o verbose
wyłączyć, aby włączyć szczegółowe informacje (przy okazji domyślnie jest wyłączone, ale to nie ma znaczenia). Możesz teżset +o verbose
wyłączyć szczegółowe informacje. System Windows nie ma takiego zastosowania dla swojego polecenia set.źródło
Mówiąc prościej, zmienne środowiskowe są ustawiane podczas otwierania nowej sesji powłoki. W dowolnym momencie, jeśli zmienisz jakiekolwiek wartości zmiennych, powłoka nie będzie miała możliwości wybrania tej zmiany. oznacza to, że wprowadzone zmiany zaczną obowiązywać w nowych sesjach powłoki. Z
export
drugiej strony polecenie zapewnia możliwość zaktualizowania bieżącej sesji powłoki o zmianę wprowadzoną w eksportowanej zmiennej. Nie musisz czekać do nowej sesji powłoki, aby użyć wartości zmiennej, którą zmieniłeś.źródło
a=5
wtedyecho $a
jest 5. Jednak napisałeś „w dowolnym momencie, jeśli zmienisz którąkolwiek z wartości zmiennych, powłoka nie ma możliwości wybrania tej zmiany. Oznacza to, że zmiany, które wprowadziłeś, stają się skuteczne w nowych sesjach powłoki”. . <- Jak więc zaktualizował sesję powłoki bez eksportu. Czy możesz podać przykład, w którym eksport jest konieczny?