Come esportare permanentemente una variabile in Linux?


156

Sto eseguendo RHEL6 e ho esportato una variabile d'ambiente come questa:

export DISPLAY=:0

Quella variabile si perde quando il terminale è chiuso. Come posso aggiungerlo in modo permanente in modo che questo valore variabile esista sempre con un determinato utente?

Risposte:


172

È possibile aggiungerlo al file di configurazione della shell, ad esempio $HOME/.bashrco più a livello globale in /etc/environment. Dopo aver aggiunto queste righe, le modifiche non si rifletteranno istantaneamente nel sistema basato sulla GUI, è necessario uscire dal terminale o crearne uno nuovo e nel server disconnettersi dalla sessione e accedere per riflettere queste modifiche.


3
Grazie, è utile. Come posso rendere effettive le modifiche senza riavviare? (Sono un novizio di Linux)
Bitterblue,

6
@ mini-me - ~ / bashrc viene estratto ogni volta che si apre una shell. Per caricarlo esplicitamente, utilizzare sourcead es > source ~/.bashrc. - .
kostja,

@kostja Per tutte le nuove conchiglie? Se eclipse è in esecuzione prima di cambiare quelle variabili env e voglio che eclipse abbia cambiato var, devo riavviare eclipse?
Bitterblue,

1
@ mini-me: l'ambiente di un processo viene solitamente impostato dal chiamante e modificato dall'interno del processo. Cambiare env dall'esterno di un processo in esecuzione è insolito e non fattibile export, ma prova con un debugger
Antoine,

1
@ Mr.Hyde: di solito non importa. I file vengono analizzati dall'alto verso il basso, quindi se una definizione var dipende da un'altra, devono essere ordinate di conseguenza. Quindi sì, la fine del file va bene.
Antoine,

120

Devi modificare tre file per impostare una variabile d'ambiente permanente come segue:

  • ~ / .Bashrc

    Quando si apre una finestra del terminale, questo file verrà eseguito. Pertanto, se si desidera avere una variabile di ambiente permanente in tutte le finestre del terminale, è necessario aggiungere la seguente riga alla fine di questo file:
    export DISPLAY = 0

  • ~ / .Profile

  • Come per bashrc devi mettere la riga di comando menzionata alla fine di questo file per avere la tua variabile d'ambiente in ogni login del tuo sistema operativo.

  • / Etc / environment

  • Se vuoi che il tuo ambiente sia variabile in ogni finestra o applicazione (non solo nella finestra del terminale) devi modificare questo file. Aggiungi il seguente comando alla fine di questo file:
    DISPLAY = 0
    Nota che in questo file non devi scrivere il comando export

Normalmente è necessario riavviare il computer per applicare queste modifiche. Ma puoi applicare le modifiche in bashrc e nel profilo con questi comandi:

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

Ma per / etc / environment non hai altra scelta che riavviare (per quanto ne so)

  • Una soluzione semplice

  • Ho scritto una semplice sceneggiatura per queste procedure per fare tutto quel lavoro. Devi solo impostare il nome e il valore della variabile di ambiente.

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

    Salvare queste righe in un file shfile quindi renderlo eseguibile ed eseguirlo!


    1
    La sceneggiatura ha funzionato molto bene. Ho Ubuntu 14.04 installato. Ho appena incollato il contenuto di cui sopra in un file vuoto, chiamai insert_var.sh , poi chmod -x insert_var.sh, poi bash insert_var.sh. Grazie.
    Brunno Vodola Martins,

    Ho aperto una finestra terminale in Ubuntu e ho inserito l'esportazione MY_VAR = 1. Dove verrà archiviata questa variabile MY_VAR?
    vgokul129,

    29

    aggiungi la linea al tuo .bashrco .profile. Le variabili impostate $HOME/.profilesono attive per l'utente corrente, quelle in /etc/profileglobali. Il .bashrcè tirato su ogni inizio sessione bash.


    27

    Sui sistemi Ubuntu, utilizzare le seguenti posizioni:

    1. Variabili persistenti a livello di sistema nel formato di JAVA_PATH=/usr/local/javaarchivio in

      /etc/environment
      
    2. Variabili persistenti a livello di sistema che fanno riferimento a variabili come
      export PATH="$JAVA_PATH:$PATH"store in

      /etc/.bashrc
      
    3. Variabili persistenti specifiche dell'utente nel formato di PATH DEFAULT=/usr/bin:usr/local/binarchivio in

      ~/.pam_environment
      

    Per maggiori dettagli su # 2, controlla questa domanda Chiedi a Ubuntu . NOTA: # 3 è la raccomandazione di Ubuntu ma potrebbe avere problemi di sicurezza nel mondo reale.


    2

    Un esempio particolare: ho Java 7 e Java 6 installati, ho bisogno di eseguire alcuni build con 6, altri con 7. Quindi ho bisogno di modificare dinamicamente in JAVA_HOMEmodo che Mavil raccolga ciò che voglio per ogni build. Ho fatto quanto segue:

    • j6.shscript creato che esegue semplicemente il JAVA_HOME=...percorso di esportazione all'installazione j6 ...
    • quindi, come suggerito da uno dei commenti sopra, ogni volta che ho bisogno di J6 per una build, eseguo sorgente j6.shnel rispettivo terminale di comando. Per impostazione predefinita, my JAVA_HOMEè impostato su J7.

    Spero che questo ti aiuti.


    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.