Mam wiele kont Amazon EC2 i chcę szybko móc zmieniać zmienne, na przykład za $EC2_HOME
pomocą skryptu.
Mam skonfigurowany skrypt powłoki w ten sposób:
#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
Kiedy uruchamiam skrypt, wiem, że EC2_HOME
jest ustawiony, ale pomyślałem, że użycie export
spowoduje, że zmienna pozostanie po zakończeniu skryptu. Nie działa, ponieważ bieganie echo $EC_HOME
niczego nie pokazuje.
Wiem, że to musi być bardzo podstawowa znajomość skryptów Linuksa, ale nie wiem. Próbowałem znaleźć powiązane pytania bez powodzenia - przepraszam, jeśli jest to duplikat.
.
lubsource
, nie tworzysz nowego procesu potomnego, uruchamiasz polecenia w bieżącej powłoce..
lubsource
. Dlaczego to się dzieje ?exit
instrukcję, więc nie jest odpowiednie źródło.source ./script
działa całkowicie dobrze,sudo source ./script.sh
mówisudo: source: command not found
. Jak mogę to zrobić za pomocą sudo?sudo
i zależnie od ustawień konfiguracyjnych/etc/sudoers
można lub nie można zachować środowiska podczas uruchamiania poleceń za pomocąsudo
. Sugeruję, abyś spróbował pobrać swój skrypt, a następnie uruchomićsudo
z-E
opcją ochrony środowiska. Jeśli to nie zadziała, myślę, że niewiele możesz zrobić.Po uruchomieniu skryptu otrzymuje on własną powłokę i własne środowisko, które znikają natychmiast po zakończeniu skryptu. Aby zachować zmienne środowiskowe, umieść skrypt w bieżącej powłoce:
lub równoważnie (ale nieco bardziej przenośnie) użyj polecenia kropkowego POSIX :
Następnie definicje zostaną umieszczone w bieżącym środowisku powłoki i odziedziczone przez wszelkie programy, które z niego uruchomisz.
Aby być bliżej uruchomienia skryptu,
. a.sh
znajdzie a.sh, przeszukując katalogi wPATH
zmiennej środowiskowej.Istnieją pewne subtelności w tym, jak się zachowują i czy są
.
isource
są takie same (lub w ogóle obecne).. ./a.sh
na pewno zachowa się tak samo w każdej powłoce kompatybilnej z POSIX, alesource
i.
, i. a.sh
i i. ./a.sh
mogą się różnić. Dla Bashsource
i.
są takie same we wszystkich przypadkach; dla zshsource
zawsze najpierw sprawdza bieżący katalog ; ksh jest zasadniczo podobny.Jeśli nazwa skryptu jest podana jako ścieżka (zawierająca a
/
), ścieżka ta jest używana bezpośrednio we wszystkich przypadkach. Najbardziej przenośną rzeczą do zrobienia jest. ./script
lub. /path/to/script
.źródło
Dla przypomnienia.
Jeśli chcesz uruchomić skrypt z Internetu, który eksportuje env do systemu
możesz użyć następującego formatu
Na przykład:
źródło