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.