Używam Ubuntu 11.04. Korzystam z terminala, aby rozpocząć sesję bash i chcę dodać zmienną środowiskową:
$r@hajt:~$ env THEVAR=/example
Ale to nie działa. Pokazuje wszystkie zmienne, przy czym THEVAR jest ostatnim, ale kolejne wywołanie do env
nie pokazuje THEVAR
już - env | grep THEVAR
nic nie zwraca.
Podobnie skrypty z eksportem ( export THEVAR=/example
) lub innymi przypisaniami zmiennych ( THEVAR=/example
) nie dodają zmiennej środowiskowej.
Wiem, że robię coś złego, wiem, że to powinno być coś prostego, ale po prostu nie mogę tego znaleźć.
AKTUALIZACJA: Prawdziwe znaczenie mojego pytania było takie: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell
(W każdym razie wybiorę najbardziej głosowaną odpowiedź i zostawiam edytowany tytuł - nie o to prosiłem)
env
uruchamia program w zmodyfikowanym środowisku, a następnie odrzuca wszystkie zmiany.
THEVAR=/example
?Odpowiedzi:
Aby ustawić zmienną tylko dla bieżącej powłoki:
Aby ustawić go dla bieżącej powłoki i wszystkie procesy rozpoczęły się od bieżącej powłoki:
Aby ustawić go na stałe dla wszystkich przyszłych sesji bash, dodaj taką linię do swojego
.bashrc
pliku w$HOME
katalogu.Aby ustawić go na stałe i w całym systemie (wszyscy użytkownicy, wszystkie procesy) dodaj zmienną ustawioną w / etc / environment:
Ten plik akceptuje tylko przypisania zmiennych, takie jak:
Nie używaj
export
tutaj słowa kluczowego.Musisz się wylogować z bieżącego użytkownika i zalogować ponownie, aby nastąpiły zmiany zmiennych środowiskowych.
źródło
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session.
help.ubuntu.com/community/EnvironmentVariablesecho $myvar
Aby ustawić zmienną środowiskową raz, użyj
export
polecenia w wierszu polecenia, a nie w skrypcie powłoki:Zmienna zostanie ustawiona na resztę sesji powłoki lub do momentu jej rozbrojenia.
Aby za każdym razem ustawiać zmienną środowiskową, użyj
export
polecenia z.bashrc
pliku (lub odpowiedniego pliku inicjalizacji dla twojej powłoki).Aby ustawić zmienną środowiskową ze skryptu, użyj
export
polecenia w skrypcie, a następniesource
skryptu. Jeśli wykonasz skrypt, to nie zadziała.Wyjaśnienie różnicy między pozyskiwaniem a wykonywaniem znajduje się w następującej odpowiedzi: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- bash-script / 176788 # 176788
źródło
Aby trwale dodać nową zmienną środowiskową w Ubuntu (testowane tylko w 14.04), wykonaj następujące czynności:
sudo -H gedit /etc/environment
np. Jeśli chcesz dodać
FOO=bar
, po prostu napiszFOO=bar
w nowym wierszuźródło
sudo gedit
(patrz askubuntu.com/questions/270006/… ) ichmod 777
. To ostatnie nigdy nie powinno być wykonywane w pliku konfiguracji systemu.if
lubtest
)Foo="bar"
?Aby zmiany środowiska / var zachowały się po zakończeniu skryptu, musisz użyć
source ./script.sh
skrótu lub notacji źródłowej „”.. ./script.sh
Source wykona polecenia w skrypcie tak, jakbyś je wpisał ... więc zmienia niektóre aspekty skryptu, takie jak wyjście ... więc jeśli skrypt sprawdza coś i decyduje się wyjść, jeśli na przykład false, poprzez wywołanie
exit 0
spowoduje zakończenie bieżącej sesji terminala / powłoki.źródło
Jeśli robisz to za pomocą skryptu, jednym łatwym sposobem na ustawienie zmiennej środowiskowej na stałe jest umieszczenie poniżej instrukcji w skrypcie
Jeśli chcesz ocenić wyrażenia takie jak pwd, możesz użyć tego, na przykład,
źródło
Wiem, że jest już późno, ale jeśli chcesz dodać zmienną środowiskową dla wszystkich użytkowników (np. Użycie JAVA) - możesz wykonać następujące czynności:
1) Otwórz
/etc/bash.bashrc
za pomocą nano (możesz używać dowolnego edytora, nie wolę VIM, ponieważ jest to najgorsze, jeśli chodzi o łatwość obsługi - nic osobistego).2) Dołącz do pliku:
export VAR=path export PATH=$PATH:/bin
3) (Lepiej, jeśli możesz odbić pole) - lub po prostu otwórz nową sesję SSH i potwierdź za pomocą polecenia `env '.ALE jeśli chcesz, aby każdy użytkownik miał do tego osobne ustawienie, musisz dokonać zmiany (skryptu) w
.bashrc
pliku w~/.bashrc
(lub/home/$USER/
jeśli jesteś nowy w systemach Linux)źródło