Korzystam z source
polecenia w skrypcie bash, aby odczytać / wydrukować wartości zmiennych
more linuxmachines_mount_point.txt
export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
source linuxmachines_mount_point.txt
echo $linuxmachine01
sdb sdc sdf sdd sde sdg
Czym jest przeciwieństwo source
, aby rozbroić zmienne?
Oczekiwane rezultaty
echo $linuxmachine01
< no output >
bash
shell-script
source
Yael
źródło
źródło
source
jest ustawianie zmiennych w twoim środowisku, aleexport
instrukcje w pliku, które tysource
. Więcsource
może być odwrotniesource
, jeśli maszsource
inny plik, który zawieraunset
te same zmienne.export
s. Wystarczyexport
skopiować wartości do środowiska - ale są one obecne jako zmienne powłoki, niezależnie od tego, czy są również zdefiniowane jako zmienne środowiskowe. Co więcej, zdefiniowanie niepotrzebnych zmiennych środowiskowych skraca maksymalną długość wiersza poleceń, ponieważ są one przechowywane w tej samej (ograniczonej!) Przestrzeni na proces.Odpowiedzi:
Korzystanie z podpowłoki (zalecane)
Uruchom polecenie źródłowe w podpowłoce:
Podpowłok są zdefiniowane przez parens:
(...)
. Wszelkie zmienne powłoki ustawione w podpowłoce są zapominane po zakończeniu podpowłoki.Używam unset
To powoduje rozbrojenie dowolnej zmiennej eksportowanej przez
linuxmachines_mount_point.txt
:-F'[ =]+'
mówi awk, aby używał dowolnej kombinacji spacji i znaków równości jako separatora pól./^export/{print $2}
To każe awk wybrać linie zaczynające się od,
export
a następnie wydrukować drugie pole.unset $(...)
To uruchamia polecenie wewnątrz
$(...)
, przechwytuje jego standardowe wyjście i resetuje wszelkie zmienne nazwane przez jego dane wyjściowe.źródło
file
jest wywozem.Nie możesz odblokować
source
skryptu.Możesz zapisać wszystkie wyeksportowane zmienne w pliku tymczasowym, porównać je ze zmiennymi po źródle skryptu, a następnie usunąć przepełnienie
unset
, np .:źródło
export
s.Możesz użyć
unset
polecenia, aby „zapomnieć” o zmiennych.źródło
Najprostszym rozwiązaniem, aby uzyskać oczekiwany wynik (nic), jest ponowne zadeklarowanie zmiennej jako pustej:
Oczywiście zmienna jest nadal zdefiniowana (i eksportowana), pusta, ale zdefiniowana:
Aby poprawnie usunąć zmienną zarówno ze środowiska, jak i działającej powłoki, powinieneś użyć unset (zalecany sposób):
źródło
Najprostszym sposobem na to jest zmodyfikowanie skryptu, aby zdefiniował także polecenie cofnięcia efektu skryptu:
źródło
declare -A linuxmachines=( [01]="sdb sdc sdf" [02]="sde sdd sdb" [03]="whatever" )
wtedy wystarczyunset linuxmachines
cofnąć.Możesz napisać swój linuxmachines_mount_point.txt w ten sposób
Kiedy potrzebujesz swoich zmiennych
Kiedy chcesz usunąć zmienne
źródło
Jeśli używasz
source
polecenia do aktywacji aVirtualEnvironment
, możesz wyjść z niego za pomocą poleceniadeactivate
.źródło