/ / Jak zdefiniować zmienną skryptu powłoki mającą zasięg poza skryptem - bash, shell, ubuntu

Jak zdefiniować zmienną skryptu powłoki mającą zasięg poza skryptem - bash, shell, ubuntu

Używam Ubuntu Natty.

Mam skrypt powłoki, który zapisałem w /etc/init.d/qstart. Skrypt powłoki zawiera:

apt-get -y update
apt-get -y upgrade
apt-get -y install tofrodos gcc make nmap lsof expect sysstat
dbpass="mydbpassword"

Jednak po wykonaniu skryptu chcę przetestować, że dbpass jest ustawiony i wprowadzam echo $dbpass w wierszu polecenia. Ale jest puste.

Jak zdefiniować zmienną w skrypcie powłoki, aby uzyskać do niej dostęp poza nią ?!

Z góry dziękuję.

Odpowiedzi:

8 dla odpowiedzi № 1

Nie możesz ustawić zmiennych w środowisku procesu macierzystego. Możesz tylko ustawić środowisko bieżącego procesu lub przygotować środowisko dla dzieci twojego procesu.

Powiedziawszy to, możesz polecić swojej powłoce uruchamianie poleceń ze skryptu w bieżącym procesie powłoki, zamiast tworzenia nowej powłoki. Możesz to zrobić tak:

source your_script.sh

lub

. your_script.sh

(zwróć uwagę na spację po kropce). Ponieważ tutaj polecenia wewnątrz your_script.sh są uruchamiane przez bieżącą powłokę, a zmiany wprowadzone do środowiska wewnątrz skryptu są zachowywane.

Jednak jeśli powłoka działająca w twoim skrypcie nie jestprzodek powłoki, w której chcesz używać zmiennej środowiskowej, nie ma możliwości osiągnięcia celu przy użyciu zmiennych środowiskowych. Na przykład, jeśli skrypt jest uruchamiany przy inicjalizacji przez pewną bezstronną powłokę, wszystkie wykonane ustawienia środowiska są nieodwracalnie utracone na zawsze. W takim przypadku użyj jakiegoś innego mechanizmu, takiego jak plik (może gdzieś pod /var).

Jeśli chcesz wszystkie wystąpienia danej powłokiNiektóre zmienne ustawione w ich środowisku można użyć skryptów inicjalizacyjnych, których używa większość powłok. Zwykle mają skrypty inicjalizacyjne dla całego systemu i dla użytkownika. Na przykład bash używa /etc/profile jako skrypt inicjalizacji całego systemu dla interaktywnej powłoki logowania i $HOME/.bash_profile (również $HOME/.bash_login i $HOME/.profile) jako skrypt inicjujący użytkownika. Widzieć to odniesienie dla szczegółów specyficznych dla basha. Jeśli używasz innej powłoki, wypróbuj odpowiednią instrukcję.


2 dla odpowiedzi nr 2

Nie można ustawić zmiennej środowiskowej dla procesu nadrzędnego w procesie potomnym source script.sh lub . script.sh zamiast wykonywania go, w tym przypadku jest on wykonywany w tym samym procesie bash i wszystkie zmiany są zachowywane.

Ponadto, jeśli chcesz ustawić tę samą zmienną w swoim skrypcie init i gdzie indziej, możesz ją umieścić /etc/default/something, co jest bardziej powszechne. I w końcu możesz source ten plik do bashrc lub /etc/profile.d/something plik.