Cómo establecer permanentemente variables ambientales

227

Mis variables son

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

¿Cómo guardar estas variables de forma permanente?

usuario3021349
fuente
2
Las otras respuestas en esta página son geniales. Una pequeña recomendación sería agregar /usr/lib/oracle/11.2/client64/libun nuevo archivo debajo de la /etc/ld.so.conf.d/ruta. Entonces no necesita configurar LD_LIBRARY_PATH, consulte también aquí .
Elliott Frisch
1
Cuidado, hay más en esta historia de lo que parece inicialmente. Los invito a revisar mi respuesta.
jasonleonhard

Respuestas:

252

Puede agregarlo al archivo .profileo al archivo de perfil del shell de inicio de sesión (ubicado en su directorio de inicio).

Para cambiar la variable ambiental "permanentemente", deberá considerar al menos estas situaciones:

  1. Shell de inicio de sesión / no inicio de sesión
  2. Shell interactivo / no interactivo

golpetazo

  1. Bash como shell de entrada se carga /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profileen el orden
  2. Bash ya que se cargará el shell interactivo sin inicio de sesión ~/.bashrc
  3. Bash como shell no interactivo sin inicio de sesión cargará la configuración especificada en la variable de entorno $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

Bourne

$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

Si desea que sea permanente para todos los usuarios, puede editar los archivos correspondientes en /etc/, es decir, /etc/profilepara shells tipo Bourne, /etc/csh.loginpara (t) csh /etc/zsh/zprofiley /etc/zsh/zshrcpara zsh.

Otra opción es usar /etc/environment, que en los sistemas Linux es leído por el módulo PAM pam_envy admite solo tareas simples, no expansiones de estilo shell. (Consulte la guía de Debian sobre esto).

Es probable que estos archivos ya contengan algunas asignaciones, así que siga la sintaxis que ve ya presente en su archivo.

Asegúrese de reiniciar el shell y volver a iniciar sesión en el usuario para aplicar los cambios.

Si necesita agregar una variable de entorno de todo el sistema, ahora hay una /etc/profile.dcarpeta que contiene un script sh para inicializar la variable.
Puede colocar su script sh con todas las variables exportadas aquí.
Tenga cuidado, aunque esto no debe usarse como una forma estándar de agregar variables a env en Debian.

Kiwy
fuente
Esto .profileen /etc/pero no cómo configurar las variables en este .profilefavor dime
user3021349
66
.profileestá en su directorio personal no/etc/
Kiwy
1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349
44
@ user3021349 No quise ser grosero, pero si piensas un segundo, también puedes usar un editor diferente que domines. :wqes el comando para escribir el archivo y salir en vi, no olvides escribir escantes
Kiwy
3
Deberá tener en cuenta las variables de entorno en los crontabscripts. Ninguna de estas ubicaciones se buscará cuando crontabse ejecute un script.
yegle
71

Para hacer si para todos los usuarios / shells, dependiendo de la distribución que pueda usar /etc/environmento /etc/profile. Crear un nuevo archivo /etc/profile.dpuede ser preferible si existe, ya que será menos probable que entre en conflicto con las actualizaciones realizadas por el sistema de empaquetado.

En /etc/environment, las variables generalmente se establecen con name=value, por ejemplo:

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

En /etc/profile, debe usar exportya que este es un script, por ejemplo:

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

Lo mismo ocurre con un archivo debajo /etc/profile.d, también puede haber restricciones de nombres que deben cumplirse para que el archivo funcione. En Debian, el archivo debe tener la extensión .sh(aunque no necesita una línea de explosión o permisos ejecutables, ya que es de origen). revise su documentación de distribución o mire el /etc/profilescript para ver cómo se cargan estos archivos.

Tenga en cuenta también que la configuración LD_LIBRARY_PATHpermanente es potencialmente problemática , lo que incluye un riesgo de seguridad. Como alternativa, sugeriría encontrar alguna forma de anteponer LD_LIBRARY_PATHel inicio de la línea de comando para cada programa que lo necesite antes de ejecutarlo. P.ej:

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

Una forma de hacerlo es utilizar un script de envoltura para ejecutar el programa. Puede darle el mismo nombre a su programa y ponerlo en /usr/local/bincualquier lugar que aparezca antes de la ubicación de su programa PATH. Aquí hay un script de ejemplo (no se olvide chmod +xdel script):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"
Graeme
fuente
entonces, si agregué pares de valor a mi environmentarchivo, ¿qué causa que se carguen? Por ejemplo, después de salir del editor vi (cambios escritos con éxito), espero escribir echo $MY_NEW_VARIABLEy verlo impreso - EDITAR: veo que están allí si
lanzo
No estoy seguro de si esto es un problema personal o qué, pero tuve que reiniciar mi sistema operativo después de configurarlo /etc/environment, incluso si reiniciaba el terminal bash o escribía source /etc/environment. Entonces, si tiene problemas donde la variable de entorno no se perpetúa, intente reiniciar.
Blairg23
@bkwdesign @ Blairg23, /etc/environmentno es un script, por lo que no puede obtenerse. PAM lo carga en el momento de inicio de sesión (y un puñado de otros eventos del sistema), por lo que puede cerrar sesión / iniciar sesión o ejecutar una nueva sesión de inicio de sesión en un terminal $ su <your username here>para recoger los nuevos valores en esa sesión aislada. Los valores desaparecerán una vez que salga, por lo que probablemente sea menos propenso a errores simplemente cerrar sesión / iniciar sesión por completo.
AaronDanielson
2

Cuando instala Oracle, Oracle le pidió que ejecutara algunos scripts antes de hacer clic en Aceptar. Ese script puso una configuración ficticia en el .bash_profiledirectorio de inicio del usuario in oracle. Para ver el archivo, ls -alse mostrarán todos los archivos ocultos.

escriba nano bash_profilepara abrir el archivo. Realice cambios en el archivo para reflejar su nombre de host y el nombre sid apropiado. verifique cualquier otra configuración que necesite modificación. presione el control x para guardar y escriba y cuando se le pregunte si desea guardar. Presione la tecla de retorno para guardar. Reinicia la computadora. Iniciando sesión como usuario de Oracle. iniciar la base de datos escribiendo

sqlplus / as sysdba

startup  
frankfurt
fuente
¿Cómo difiere esto de la respuesta aceptada ?
roaima