Napisałem następujący skrypt, aby w razie potrzeby ustawić niektóre zmienne środowiskowe.
#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH
Poniżej polecenia i wyników, które widzę na moim terminalu: skrypt działa, ale zmienne nie są ustawione na końcu.
~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE
~$:
Co jest nie tak? Z góry dziękuję. Mirko
źródło
export
przekazywać zmiennych do podpowłoki, podpowłoka jest kopią bieżącej powłoki, w tym zmiennych i funkcji itp. Wyeksportowane zmienne są kopiowane do nowych procesów spawnowanych z powłoki, niezależnie od tego, czy jest to kolejna powłoka, czy nie. Po drugie,.
to polecenie POSIX do pozyskiwania. Bash dodajesource
jako bardziej czytelny synonim, ale nie można polegać na tym, że jest dostępny w sh. Wreszcie. ./script
zamiast tego,. script
jeśli chcesz uniknąć niespodzianek. mywiki.wooledge.org/BashFAQ/060Po uruchomieniu skryptu działa on w podpowłoce. Zmienne są prawidłowe tylko w kontekście tej podpowłoki. Ustaw je w swoim
.bashrc
lub.profile
i czytaj o zmiennych i podpowłokach .export
Oświadczenie działa w dół hierarchię (bieżącej powłoki i wszystkich jego podpowłok) nie jako na swoim przykładzie.Alternatywnie (jeśli naprawdę chcesz, aby skrypt wpływał na środowisko twojej bieżącej powłoki), uruchom go jako:
Powoduje to, że działa on w bieżącej powłoce, ale nie przekazuje zmiennych do hierarchii.
źródło
Często chcę bezproblemowo ustawić zmienną środowiskową.
Oto, co dodaję do mojego .bashrc, aby zaimplementować tę wygodę.
źródło
Możesz spróbować czegoś takiego
źródło