Come impostare in modo permanente le variabili ambientali


227

Le mie variabili sono

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

Come salvare queste variabili in modo permanente?


2
Le altre risposte su questa pagina sono fantastiche. Un piccolo consiglio sarebbe quello di aggiungere /usr/lib/oracle/11.2/client64/libun nuovo file sotto il /etc/ld.so.conf.d/percorso. Quindi non è necessario impostare LD_LIBRARY_PATH, vedere anche qui .
Elliott Frisch,

1
Attento, c'è di più in questa storia di quanto appaia inizialmente. Ti invito a controllare la mia risposta.
Jasonleonhard,

Risposte:


252

È possibile aggiungerlo al file .profileo al file del profilo della shell di accesso (situato nella directory principale).

Per modificare la variabile ambientale "in modo permanente" dovrai considerare almeno queste situazioni:

  1. Shell di accesso / non accesso
  2. Shell interattiva / non interattiva

bash

  1. Bash come shell di login caricherà /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profilenell'ordine
  2. Bash verrà caricato come shell interattiva senza accesso ~/.bashrc
  3. Bash come shell non interattiva non login caricherà la configurazione specificata nella variabile d'ambiente $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

ruscello

$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 o 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

Se si desidera renderlo permanente per tutti gli utenti, è possibile modificare i file corrispondenti in /etc/, ad esempio /etc/profileper shell tipo Bourne, /etc/csh.loginper (t) csh e /etc/zsh/zprofilee /etc/zsh/zshrcper zsh.

Un'altra opzione è l'uso /etc/environment, che sui sistemi Linux viene letto dal modulo PAM pam_enve supporta solo assegnazioni semplici, non espansioni di tipo shell. (Vedi la guida di Debian su questo.)

È probabile che questi file contengano già alcuni compiti, quindi segui la sintassi che vedi già presente nel tuo file.

Assicurarsi di riavviare la shell e accedere nuovamente all'utente per applicare le modifiche.

Se è necessario aggiungere una variabile di ambiente a livello di sistema, ora c'è una /etc/profile.dcartella che contiene sh script per inizializzare la variabile.
È possibile posizionare qui lo script sh con tutte le variabili esportate.
Fai attenzione, anche se questo non dovrebbe essere usato come un modo standard per aggiungere variabili a env su Debian.


Questo .profilein /etc/ma non so come impostare le variabili in questo per .profilefavore dimmi
user3021349

6
.profilenon è nella tua home directory/etc/
Kiwy,

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

4
@ user3021349 Non intendevo essere scortese, ma se pensi un secondo puoi anche usare un editor diverso che controlli. :wqè il comando per scrivere il file e uscire in vi non dimenticare di digitare escprima
Kiwy,

3
Dovrai considerare le variabili di ambiente negli crontabscript. Nessuna di queste posizioni verrà cercata quando uno crontabscript è in esecuzione.
yegle

71

Per fare se per tutti gli utenti / shell, a seconda della distribuzione è possibile utilizzare /etc/environmento /etc/profile. La creazione di un nuovo file in /etc/profile.dpotrebbe essere preferibile se esiste, poiché sarà meno probabile che sia in conflitto con gli aggiornamenti effettuati dal sistema di packaging.

In /etc/environment, le variabili sono generalmente impostate con name=value, ad esempio:

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

In /etc/profile, è necessario utilizzare exportpoiché si tratta di uno script, ad esempio:

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

Lo stesso vale per un file sotto /etc/profile.d, potrebbero esserci anche delle restrizioni di denominazione che devono essere soddisfatte affinché il file funzioni. Su Debian, il file deve avere l'estensione .sh(anche se non ha bisogno di una bang line o permessi eseguibili poiché è di provenienza). controlla la tua documentazione sulla distribuzione o guarda lo /etc/profilescript per vedere come vengono caricati questi file.

Si noti inoltre che l'impostazione in modo LD_LIBRARY_PATHpermanente è potenzialmente problematica , incluso il rischio per la sicurezza. In alternativa, suggerirei di trovare un modo per anteporre LD_LIBRARY_PATHl'inizio della riga di comando per ciascun programma che ne ha bisogno prima di eseguirlo. Per esempio:

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

Un modo per farlo è utilizzare uno script wrapper per eseguire il programma. Potresti dare a questo lo stesso nome del tuo programma e inserirlo /usr/local/bino dovunque appaia prima della posizione del tuo programma PATH. Ecco uno script di esempio (non dimenticare chmod +xlo script):

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

quindi, se ho aggiunto coppie di valori al mio environmentfile, cosa causa il loro caricamento? Ad esempio, dopo essere uscito dall'editor vi (modifiche scritte correttamente), mi aspetto di scriverlo echo $MY_NEW_VARIABLEe vederlo stampare - EDIT: vedo che sono lì se lancio una nuova shell di comandi
bkwdesign

Non sono sicuro se si tratti di un problema personale o altro, ma ho dovuto riavviare il sistema operativo dopo averlo impostato /etc/environment, anche se ho riavviato il terminale Bash o digitato source /etc/environment. Quindi, se riscontri problemi in cui la variabile d'ambiente non si perpetua, prova a riavviare.
Blairg23,

@bkwdesign @ Blairg23, /etc/environmentnon è uno script, quindi non può essere acquistato. Viene caricato al momento dell'accesso (e una manciata di altri eventi di sistema) da PAM, quindi è possibile disconnettersi / accedere o eseguire una nuova sessione di accesso in un terminale $ su <your username here>per raccogliere i nuovi valori in quella sessione isolata. I valori scompaiono una volta usciti, quindi è probabilmente meno soggetto a errori solo il logout / login completo.
AaronDanielson,

2

quando installi Oracle, Oracle chiede di eseguire alcuni script prima di fare clic su OK. Lo script ha inserito un'impostazione fittizia nella .bash_profilehome directory dell'utente in oracle. Per vedere il file, ls -almostrerà tutti i file nascosti.

digitare nano bash_profileper aprire il file. Apporta le modifiche al file per riflettere il tuo nome host e il nome sid appropriato. controlla eventuali altre impostazioni che richiedono modifiche. premere control x per salvare e digitare y quando viene chiesto se si desidera salvare. Premere il tasto Invio per salvare. Riavvia il computer. Registrazione come utente Oracle. avviare il database digitando

sqlplus / as sysdba

startup  

In cosa differisce dalla risposta accettata ?
roaima,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.