¿Cómo exportar permanentemente una variable en Linux?

156

Estoy ejecutando RHEL6, y he exportado una variable de entorno como esta:

export DISPLAY=:0

Esa variable se pierde cuando el terminal está cerrado. ¿Cómo agrego esto permanentemente para que este valor variable siempre exista con un usuario en particular?

usuario1340582
fuente

Respuestas:

172

Puede agregarlo a su archivo de configuración de shell, por ejemplo, $HOME/.bashrco más globalmente en /etc/environment. Después de agregar estas líneas, los cambios no se reflejarán instantáneamente en los sistemas basados ​​en GUI, debe salir del terminal o crear uno nuevo y, en el servidor, cerrar la sesión e iniciar sesión para reflejar estos cambios.

Antoine
fuente
3
Gracias, eso es útil. ¿Cómo puedo hacer que los cambios surtan efecto sin reiniciar? (Soy novato en Linux)
Bitterblue
66
@ mini-me - ~ / bashrc se extrae cada vez que abre un shell. Para cargarlo explícitamente, use sourceeg - > source ~/.bashrc.
kostja
@kostja ¿Para todos los nuevos proyectiles? Si tengo eclipse ejecutándose antes de cambiar esas variables env y quiero que eclipse haya cambiado vars, ¿tengo que reiniciar eclipse?
Bitterblue
1
@ mini-me: el entorno de un proceso generalmente lo establece la persona que llama y se cambia desde dentro del proceso. Cambiar el entorno desde fuera de un proceso en ejecución es inusual y no es factible export, pero intente con un depurador
Antoine
1
@ Mr.Hyde: Usualmente no importa. Los archivos se analizan de arriba a abajo, por lo que si una definición var depende de otra, deben ordenarse en consecuencia. Entonces sí, el final del archivo está bien.
Antoine
120

Debe editar tres archivos para establecer una variable de entorno permanente de la siguiente manera:

  • ~ / .bashrc

    Cuando abra cualquier ventana de terminal, se ejecutará este archivo. Por lo tanto, si desea tener una variable de entorno permanente en todas sus ventanas de terminal, debe agregar la siguiente línea al final de este archivo:
    export DISPLAY = 0

  • ~ / .profile

  • Al igual que bashrc , debe colocar la línea de comando mencionada al final de este archivo para tener su variable de entorno en cada inicio de sesión de su sistema operativo.

  • / etc / environment

  • Si desea que su entorno sea variable en todas las ventanas o aplicaciones (no solo en la ventana de terminal), debe editar este archivo. Agregue el siguiente comando al final de este archivo:
    DISPLAY = 0
    Tenga en cuenta que en este archivo no tiene que escribir el comando de exportación

Normalmente debe reiniciar su computadora para aplicar estos cambios. Pero puede aplicar cambios en bashrc y perfil mediante estos comandos:

$ source ~/.bashrc
$ source ~/.profile

Pero para / etc / environment no tienes más remedio que reiniciar (hasta donde yo sé)

  • Una solución simple

  • He escrito un script simple para estos procedimientos para hacer todo ese trabajo. Solo tiene que establecer el nombre y el valor de su variable de entorno.

    #!/bin/bash
    echo "Enter variable name: "
    read variable_name
    echo "Enter variable value: "
    read variable_value
    echo "adding " $variable_name " to environment variables: " $variable_value
    echo "export "$variable_name"="$variable_value>>~/.bashrc
    echo $variable_name"="$variable_value>>~/.profile
    echo $variable_name"="$variable_value>>/etc/environment
    source ~/.bashrc
    source ~/.profile
    echo "do you want to restart your computer to apply changes in /etc/environment file? yes(y)no(n)"
    read restart
    case $restart in
        y) sudo shutdown -r 0;;
        n) echo "don't forget to restart your computer manually";;
    esac
    exit
    

    ¡Guarde estas líneas en un archivo shf, hágalo ejecutable y simplemente ejecútelo!

    e_soroush
    fuente
    1
    El guión funcionó muy bien. Tengo instalado Ubuntu 14.04. Acabo de pegar el contenido de arriba en un archivo en blanco, lo llamé insert_var.sh , luego chmod -x insert_var.sh, luego bash insert_var.sh. Gracias.
    Brunno Vodola Martins
    Abrí una ventana de terminal en Ubuntu e ingresé export MY_VAR = 1. ¿Dónde se almacenará esta variable MY_VAR?
    vgokul129
    29

    agregue la línea a su .bashrco .profile. Las variables configuradas $HOME/.profileestán activas para el usuario actual, las variables /etc/profileson globales. El .bashrcse extrae en cada inicio de sesión bash.

    kostja
    fuente
    27

    En los sistemas Ubuntu, use las siguientes ubicaciones:

    1. Variables persistentes en todo el sistema en el formato de JAVA_PATH=/usr/local/javatienda en

      /etc/environment
      
    2. Variables persistentes en todo el sistema que hacen referencia a variables como
      export PATH="$JAVA_PATH:$PATH"almacenar en

      /etc/.bashrc
      
    3. Variables persistentes específicas del usuario en el formato de PATH DEFAULT=/usr/bin:usr/local/bintienda en

      ~/.pam_environment
      

    Para obtener más detalles sobre el n. ° 2, consulte esta respuesta a Ask Ubuntu . NOTA: # 3 es la recomendación de Ubuntu, pero puede tener problemas de seguridad en el mundo real.

    csi
    fuente
    2

    Un ejemplo particular: tengo Java 7 y Java 6 instalados, necesito ejecutar algunas compilaciones con 6, otras con 7. Por lo tanto, necesito modificar dinámicamente JAVA_HOMEpara que Maven obtenga lo que quiero para cada compilación. Hice lo siguiente:

    • j6.shscript creado que simplemente exporta la JAVA_HOME=...ruta a la instalación j6 ...
    • luego, como lo sugiere uno de los comentarios anteriores, cada vez que necesito J6 para una compilación, ejecuto la fuente j6.shen ese terminal de comando respectivo. Por defecto, mi JAVA_HOMEestá configurado en J7.

    Espero que esto ayude.

    Cristian Botiza
    fuente