Czy w systemie Linux (Ubuntu 11.04) w bash można tymczasowo ustawić zmienną środowiskową, która będzie się różnić od zwykłej zmiennej tylko na czas trwania skryptu? Na przykład, w skrypcie powłoki, utworzenie przenośnej aplikacji, która zapisuje w HOME, poprzez tymczasowe ustawienie HOME na folder w obecnym katalogu roboczym, a następnie uruchomienie aplikacji.
linux
bash
environment-variables
suchipi
źródło
źródło
Odpowiedzi:
źródło
vblank_mode=0 glxgears
. Działa, ale mówi teżvblank_mode=0: command not found
po uruchomieniu, podczas gdy poprzedzanieenv
tego nie powoduje. [testowanie ...] Najwyraźniej zsh tego nie lubi (ale nadal używa go poprawnie), ale bash jest w porządku. Myślę, żeenv
od teraz będę stosować tę metodę.VAR1="hello" echo $VAR1
to, że nic nie zwróci?VAR1="hello" bash -c 'echo $VAR1'
źródło
VAR=value myScript args ...
PATH=$PATH:XYZ echo $PATH | grep XYZ
jednak nie ma żadnego wyjścia? 2. Jaka jest różnica między używaniem a nieużywaniemenv
?PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ
- pojedyncze cudzysłowy są tutaj kluczoweenv
a niekorzystaniem z niego?IFS=$'\n' for l in lines; do ... done
Po prostu włóż
w miejscu skryptu, w którym ma nastąpić zmiana. Ponieważ każdy proces ma swój własny zestaw zmiennych środowiskowych, definicja ta automatycznie przestanie mieć jakiekolwiek znaczenie po zakończeniu działania skryptu (a wraz z nim instancji basha ze zmienionym środowiskiem).
źródło
export
przekaże zmienną do podpowłok, ale nie kontroluje powłoki nadrzędnej. Jeśli piszesz skrypt, który zaczyna się od „#! / Bin / sh” lub podobnego, KAŻDA ustawiona zmienna zniknie po zakończeniu działania skryptu.source
skrypt, zostanie on wykonany przez tę samą powłokę, w której wpiszesz polecenie.$HOME
on być dziedziczony przez jakiekolwiek polecenia wykonywane ze skryptu. A jeśli tego nie zrobi, a ustawienie$HOME
działa tylko na korzyść samego skryptu, prawdopodobnie lepiej będzie zmodyfikować skrypt, aby odnosił się do czegoś innego niż$HOME
.