Comment exporter en permanence une variable sous Linux?


156

J'utilise RHEL6 et j'ai exporté une variable d'environnement comme celle-ci:

export DISPLAY=:0

Cette variable est perdue lorsque le terminal est fermé. Comment puis-je ajouter cela de manière permanente afin que cette valeur de variable existe toujours avec un utilisateur particulier?

Réponses:


172

Vous pouvez l'ajouter à votre fichier de configuration shell, par exemple $HOME/.bashrcou plus globalement dans /etc/environment. Après avoir ajouté ces lignes, les modifications ne seront pas instantanément reflétées dans le système basé sur l'interface graphique, vous devez quitter le terminal ou en créer un nouveau et, dans le serveur, déconnecter la session et vous connecter pour refléter ces changements.


3
Merci, c'est utile. Comment puis-je appliquer les modifications sans redémarrage? (Je suis un débutant Linux)
Bitterblue

6
@ mini-me - ~ / bashrc est tiré chaque fois que vous ouvrez un shell. Pour le charger explicitement, utilisez sourcepar exemple - > source ~/.bashrc.
kostja

@kostja Pour tous les nouveaux obus? Si eclipse est en cours d'exécution avant de modifier ces variables d'environnement et que je veux qu'eclipse ait changé de vars, dois-je redémarrer eclipse?
Bitterblue

1
@ mini-me: l'environnement d'un processus est généralement défini par l'appelant et modifié depuis l'intérieur du processus. Changer d'environnement depuis l'extérieur d'un processus en cours d'exécution est inhabituel et impossible avec export, mais essayez avec un débogueur
Antoine

1
@ Mr.Hyde: Cela n'a généralement pas d'importance. Les fichiers sont analysés de haut en bas, donc si une définition de var dépend d'une autre, ils doivent être classés en conséquence. Alors oui, la fin du fichier est bien.
Antoine

120

Vous devez éditer trois fichiers pour définir une variable d'environnement permanente comme suit:

  • ~ / .bashrc

    Lorsque vous ouvrez une fenêtre de terminal, ce fichier sera exécuté. Par conséquent, si vous souhaitez avoir une variable d'environnement permanente dans toutes vos fenêtres de terminal, vous devez ajouter la ligne suivante à la fin de ce fichier:
    export DISPLAY = 0

  • ~ / .profile

  • Comme bashrc, vous devez mettre la ligne de commande mentionnée à la fin de ce fichier pour avoir votre variable d'environnement à chaque connexion de votre système d'exploitation.

  • / etc / environnement

  • Si vous voulez votre variable d'environnement dans chaque fenêtre ou application (pas seulement la fenêtre de terminal), vous devez éditer ce fichier. Ajoutez la commande suivante à la fin de ce fichier:
    DISPLAY = 0
    Notez que dans ce fichier vous n'avez pas besoin d'écrire la commande d' exportation

Normalement, vous devez redémarrer votre ordinateur pour appliquer ces modifications. Mais vous pouvez appliquer des modifications dans bashrc et profile par ces commandes:

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

Mais pour / etc / environment, vous n'avez pas d'autre choix que de redémarrer (pour autant que je sache)

  • Une solution simple

  • J'ai écrit un script simple pour ces procédures pour faire tout ce travail. Il vous suffit de définir le nom et la valeur de votre variable d'environnement.

    #!/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
    

    Enregistrez ces lignes dans un shfile puis rendez-le exécutable et lancez-le!


    1
    Le script a très bien fonctionné. J'ai installé Ubuntu 14.04. Je viens de coller le contenu ci-dessus dans un fichier vierge, nommé insert_var.sh , alors chmod -x insert_var.sh, alors bash insert_var.sh. Merci.
    Brunno Vodola Martins

    J'ai ouvert une fenêtre de terminal dans Ubuntu et entrez export MY_VAR = 1. Où cette variable MY_VAR sera-t-elle stockée?
    vgokul129

    29

    ajoutez la ligne à votre .bashrcou .profile. Les variables définies dans $HOME/.profilesont actives pour l'utilisateur actuel, celles dans /etc/profilesont globales. Le .bashrcest tiré à chaque début de session bash.


    27

    Sur les systèmes Ubuntu, utilisez les emplacements suivants:

    1. Variables persistantes à l'échelle du système au format de JAVA_PATH=/usr/local/javastockage dans

      /etc/environment
      
    2. Variables persistantes à l'échelle du système qui référencent des variables telles que le
      export PATH="$JAVA_PATH:$PATH"stockage dans

      /etc/.bashrc
      
    3. Variables persistantes spécifiques à l'utilisateur au format de PATH DEFAULT=/usr/bin:usr/local/binmagasin dans

      ~/.pam_environment
      

    Pour plus de détails sur le # 2, consultez cette réponse Ask Ubuntu . REMARQUE: # 3 est la recommandation Ubuntu mais peut avoir des problèmes de sécurité dans le monde réel.


    2

    Un exemple particulier: j'ai installé Java 7 et Java 6, j'ai besoin d'exécuter certaines versions avec 6, d'autres avec 7. Par conséquent, je dois modifier dynamiquement JAVA_HOMEpour que maven prenne ce que je veux pour chaque construction. J'ai fait ce qui suit:

    • a créé un j6.shscript qui exporte simplement le JAVA_HOME=...chemin vers l'installation de j6 ...
    • puis, comme suggéré par l'un des commentaires ci-dessus, chaque fois que j'ai besoin de J6 pour une construction, j'exécute source j6.shdans ce terminal de commande respectif. Par défaut, my JAVA_HOMEest défini sur J7.

    J'espère que cela t'aides.


    En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
    Licensed under cc by-sa 3.0 with attribution required.