Jak na stałe ustawić zmienne środowiskowe


227

Moje zmienne to

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

Jak zapisać te zmienne na stałe?


2
Inne odpowiedzi na tej stronie są świetne. Jednym małym zaleceniem byłoby dodanie /usr/lib/oracle/11.2/client64/libnowego pliku pod /etc/ld.so.conf.d/ścieżką. Zatem nie musisz ustawiać LD_LIBRARY_PATH, patrz również tutaj .
Elliott Frisch

1
Ostrożnie, w tej historii jest więcej niż się początkowo wydaje. Zapraszam do sprawdzenia mojej odpowiedzi.
jasonleonhard

Odpowiedzi:


252

Możesz dodać go do pliku .profilelub pliku profilu powłoki logowania (znajdującego się w katalogu domowym).

Aby zmienić zmienną środowiskową „na stałe”, musisz wziąć pod uwagę przynajmniej następujące sytuacje:

  1. Powłoka logowania / niezalogowania
  2. Powłoka interaktywna / nieinteraktywna

grzmotnąć

  1. Bash jako powłokę logowania będzie ładować /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profilew kolejności
  2. Bash jako interaktywna powłoka niezalogowana załaduje się ~/.bashrc
  3. Bash jako nieinteraktywna powłoka nieinteraktywna załaduje konfigurację określoną w zmiennej środowiskowej $BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

zsh

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

ksh

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

kres

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh lub tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

Jeśli chcesz, aby był stały dla wszystkich użytkowników, możesz edytować odpowiednie pliki pod /etc/, tj. /etc/profileDla powłok podobnych do Bourne'a, /etc/csh.logindla (t) csh /etc/zsh/zprofilei /etc/zsh/zshrcdla zsh.

Inną opcją jest użycie /etc/environment, które w systemach Linux jest odczytywane przez moduł PAM pam_envi obsługuje tylko proste przypisania, a nie rozszerzenia w stylu powłoki. (Zobacz Przewodnik Debiana na ten temat.)

Te pliki prawdopodobnie zawierają już niektóre przypisania, więc postępuj zgodnie ze składnią, którą już widzisz w swoim pliku.

Należy zrestartować powłokę i ponownie zalogować użytkownika, aby zastosować zmiany.

Jeśli chcesz dodać ogólnosystemową zmienną środowiskową, jest teraz /etc/profile.dfolder zawierający skrypt sh do inicjalizacji zmiennej.
Tutaj możesz umieścić swój skrypt sh ze wszystkimi eksportowanymi zmiennymi.
Uważaj jednak, nie należy tego używać jako standardowego sposobu dodawania zmiennej do env w Debianie.


To .profilew, /etc/ale nie wiem jak ustawić zmienne w tym .profileproszę powiedzieć
user3021349

6
.profilenie znajduje się w twoim katalogu domowym/etc/
Kiwy

1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349

4
@ user3021349 Nie chciałem być niegrzeczny, ale jeśli pomyślisz, że możesz sekundę, możesz użyć innego opanowanego edytora. :wqto polecenie zapisu pliku i wyjścia z vi, nie zapomnij wpisać escwcześniej
Kiwy

3
Musisz wziąć pod uwagę zmienne środowiskowe w crontabskryptach. Żadna z tych lokalizacji nie będzie sprawdzana podczas działania crontabskryptu.
yegle

71

Aby zrobić, jeśli dla wszystkich użytkowników / powłok, w zależności od dystrybucji, której możesz użyć /etc/environmentlub /etc/profile. Utworzenie nowego pliku /etc/profile.dmoże być preferowane, jeśli istnieje, ponieważ rzadziej będzie powodować konflikt z aktualizacjami wprowadzonymi przez system pakowania.

W /etc/environment, zmienne są zwykle ustawiane za pomocą name=value, np .:

ORACLE_HOME=/usr/lib/oracle/11.2/client64

W /etc/profilemusisz użyć, exportponieważ jest to skrypt, np .:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

To samo dotyczy pliku poniżej /etc/profile.d, mogą również obowiązywać ograniczenia nazewnictwa, które muszą być spełnione, aby plik działał. W systemie Debian plik musi mieć rozszerzenie .sh(chociaż nie wymaga linii bang ani uprawnień wykonywalnych, ponieważ jest pozyskiwany). sprawdź dokumentację dystrybucji lub spójrz na /etc/profileskrypt, aby zobaczyć, jak te pliki są ładowane.

Należy również pamiętać, że ustawienie na LD_LIBRARY_PATHstałe jest potencjalnie problematyczne , w tym może stanowić zagrożenie bezpieczeństwa. Alternatywnie proponuję znaleźć sposób, aby przed LD_LIBRARY_PATHuruchomieniem uruchomić program na początku wiersza poleceń dla każdego programu, który go potrzebuje. Na przykład:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

Jednym ze sposobów na to jest użycie skryptu opakowania do uruchomienia programu. Możesz nadać temu samemu nazwę jak twój program i umieścić go w /usr/local/bindowolnym miejscu, które pojawia się przed lokalizacją twojego programu PATH. Oto przykładowy skrypt (nie zapomnij o chmod +xskrypcie):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"

więc jeśli dodałem pary wartości do mojego environmentpliku, co powoduje ich ładowanie? Na przykład po wyjściu z edytora vi (zmiany zostały zapisane pomyślnie) echo $MY_NEW_VARIABLE
oczekuję

Nie jestem pewien, czy jest to osobisty problem lub co, ale musiałem zrestartować system operacyjny po ustawieniu tego /etc/environment, nawet jeśli ponownie uruchomiłem terminal bash lub wpisałem source /etc/environment. Więc jeśli masz problemy, w których zmienna środowiskowa nie utrwala się, spróbuj ponownie uruchomić komputer.
Blairg23,

@bkwdesign @ Blairg23, /etc/environmentnie jest skryptem, więc nie można go uzyskać. Jest ładowany w czasie logowania (i kilku innych zdarzeń systemowych) przez PAM, więc możesz się wylogować / zalogować lub uruchomić nową sesję logowania w terminalu, $ su <your username here>aby pobrać nowe wartości w tej odizolowanej sesji. Wartości znikną po wyjściu, więc prawdopodobnie mniej podatne jest na pełne wylogowanie / zalogowanie.
AaronDanielson,

2

podczas instalacji Oracle, Oracle poprosił o uruchomienie niektórych skryptów przed kliknięciem OK. Ten skrypt umieścił fikcyjne ustawienie w katalogu .bash_profileosobistym użytkownika w oracle. Aby zobaczyć plik, ls -alpokaże wszystkie ukryte pliki.

wpisz, nano bash_profileaby otworzyć plik. Wprowadź zmiany w pliku, aby odzwierciedlić nazwę hosta i odpowiednią nazwę sid. sprawdź wszelkie inne ustawienia, które wymagają modyfikacji. naciśnij control x, aby zapisać i wpisz y, gdy pojawi się pytanie, czy chcesz zapisać. Naciśnij klawisz powrotu, aby zapisać. Zrestartuj komputer. Logowanie jako użytkownik Oracle. uruchom bazę danych, wpisując

sqlplus / as sysdba

startup  

Czym różni się to od przyjętej odpowiedzi ?
roaima
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.