Kopia z propaguje Środowiska do sub-skorup, więc to działa:
$ export MY_VAR=200
$ bash
$ echo $MY_VAR
200
ale ponieważ jest to kopia, nie można uzyskać tej wartości aż do powłoki nadrzędnej - przynajmniej przez zmianę środowiska.
Wygląda na to, że naprawdę chcesz pójść o krok dalej, czyli stworzyć coś, co będzie działać jak zmienna globalna, udostępniana przez powłoki „siostrzane” inicjowane oddzielnie od rodzica - jak twoja nowa karta w Gnome Terminal.
Najczęściej odpowiedź brzmi „nie możesz, ponieważ zmienne środowiskowe nie działają w ten sposób”. Istnieje jednak inna odpowiedź, a mianowicie, że zawsze możesz coś zhakować. Jednym podejściem byłoby zapisanie wartości zmiennej do pliku, na przykład ~/.myvar
, a następnie włączenie jej do ~/.bashrc
. Następnie każda nowa powłoka rozpocznie się od wartości odczytanej z tego pliku.
Możesz pójść o krok dalej - ustaw ~/.myvar
format MYVAR=200
, a następnie ustaw PROMPT_COMMAND=source ~/.myvar
, co spowoduje ponowne odczytanie wartości za każdym razem, gdy pojawi się nowy monit. To nie jest jeszcze dość zmienna globalna wspólna, ale to zaczyna zachowywać się jak to. Nie aktywuje się, dopóki nie pojawi się monit, co w zależności od tego, co próbujesz zrobić, może być poważnym ograniczeniem.
A potem, oczywiście, następną rzeczą jest automatyczne zapisanie zmian ~/.myvar
. To staje się trochę bardziej skomplikowane i zamierzam zatrzymać się w tym miejscu, ponieważ tak naprawdę zmienne środowiskowe nie miały być mechanizmem komunikacji między powłokami i lepiej jest po prostu znaleźć inny sposób, aby to zrobić.