Dove dichiarare le variabili di ambiente?


59

Quali sono i posti corretti per:

  1. Variabili d'ambiente globali intese a influenzare tutti gli utenti?
  2. Variabili d'ambiente specifiche dell'utente?

Risposte:


16

2
Il problema è che il documento collegato è confuso e / o chiaramente errato nella parte delle variabili specifiche dell'utente. Sto ancora cercando di trovare un modo agnostico di shell per farlo. $ HOME / .profile è probabilmente la scommessa migliore ...
Rmano,

16
Incolla il testo o scatta un'istantanea del contenuto collegato: potrebbe non essere disponibile in futuro!
Nam G VU,

4
Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Thomas Ward

75

Per aggiungere alla risposta di sagarchalise, posso riassumere ciò che il link suggerisce come luoghi appropriati per le impostazioni.

Per impostazioni globali, variabili di ambiente a livello di sistema

  • Uso /etc/environment
  • Non usare /etc/profileo/etc/bash.bashrc

Dalla pagina:

/etc/environment[...] è specificamente progettato per le impostazioni delle variabili di ambiente a livello di sistema. Non è un file di script, ma consiste piuttosto di espressioni di assegnazione, una per riga. In particolare, questo file memorizza le impostazioni locali e del percorso a livello di sistema.

L'utilizzo /etc/profileè un modo molto Unix-y di andare, ma la sua funzionalità è notevolmente ridotta in Ubuntu. Esiste solo per indicare /etc/bash.bashrce raccogliere le voci da /etc/profile.d.

Sul mio sistema, l'unica voce interessante nel profilo.d è /etc/profile.d/bash_completion.sh.

Per impostazioni locali o per utente

Si consiglia una versione precedente della pagina Ubuntu ~/.pam_environment, ma la pagina attualmente suggerisce che se non funziona, è necessario utilizzare

  • ~/.profile - Questo è probabilmente il file migliore per l'inserimento delle assegnazioni delle variabili di ambiente, poiché viene eseguito automaticamente da DisplayManager durante la sessione desktop del processo di avvio, nonché dalla shell di accesso quando si accede dalla console testuale.

  • ~/.bash_profileoppure ~./bash_login- Se esiste uno di questi, bash lo esegue invece che ~/.profilequando bash viene avviato come shell di login. Bash preferirà ~/.bash_profilea ~/.bash_login. [...] Questi file non influenzeranno una sessione grafica per impostazione predefinita. "

  • ~/.bashrc - "... potrebbe essere il posto più semplice per impostare le variabili".

1
Quali programmi leggono /etc/environmente quando? Non sembra funzionare con cron, anche quando si utilizzaSHELL=/bin/bash
SystemParadox l'

1
Sembra che / etc / environment faccia parte di PAM, il che significa che dovrebbe impostare l'ambiente predefinito per tutti i processi. cron è speciale (cioè rotto) nello specifico sovrascrivendo questo ambiente con il suo.
SystemParadox

quindi come si comporta .bashrc? dopo bash_profile? invece di .profile?
apre il

1
@opensas Probabilmente dovresti fare una domanda separata, facendo riferimento a questa o alla risposta.
belacqua,

@belacqua lascia dire che devo aggiungere 2 o più variabili d'ambiente per /etc/environmentpiacere JAVA_HOME="/opt/java" e ANT_HOME="/opt/ant" come farlo
Kasun Siyambalapitiya

7

Hai:

/ etc / profile: file .profile a livello di sistema per la shell Bourne (sh (1)) e shell compatibili Bourne (bash (1), ksh (1), ash (1), ...).

che in Lucid e Maverick corrono

/etc/profile.d/*.sh

se presente e se la shell dell'utente è bash:

/etc/bash.bashrc

Per l'ambiente utente, esiste un array confuso specifico per la shell e se è considerato una "shell di accesso". Se la shell è bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

per sh / dash:

$HOME/.profile

per zsh, non proverò nemmeno a dare un senso a questo .


5

Come raccomandato su https://help.ubuntu.com/community/EnvironmentVariables :

  1. Le variabili d'ambiente globali che dovrebbero influenzare tutti gli utenti dovrebbero entrare /etc/environment.

  2. È necessario impostare le variabili di ambiente specifiche dell'utente ~/.pam_environment.

Evita i file di profilo e rc per impostare le variabili di ambiente su Ubuntu. Mi hanno causato più mal di testa di quanto valessero.

Questo è più facile a dirsi che a farsi comunque;)

È possibile che tu possa imbatterti nello stesso gap di configurazione che esisteva per me. Vedi la soluzione alternativa per la casa crittografata di seguito.

Il mio ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

Perché il brutto percorso statico? ${PATH}non funzionerebbe per me. Ho bloccato il mio login diverse volte cercando di aggirare il problema, quindi mi attengo alla brutta copia statica delle impostazioni predefinite :)

Soluzione alternativa per le cartelle domestiche crittografate

Nelle versioni di Ubuntu fino a Precise 12.04 Beta 2 inclusa, se si utilizza una directory home crittografata, sarà necessario modificarla /etc/pam.d/common-sessionper caricarla ~/.pam_environment. Questa soluzione sembra funzionare per versioni precedenti, ma non l'ho testata.

Guenther Montag (g-montag) ha scritto il 19-08-2010:

Questo sembra essere un problema con le home directory crittografate. Ho aggiunto

sessione richiesta pam_env.so

alla fine di /etc/pam.d/common-session e ora viene letto ~ / .pam_environment. Su un altro sistema senza home directory crittografate (anche 10.04) non è necessario aggirare il problema. Forse nel mio caso il sistema prova a leggere ~ / .pam_environment prima che venga decifrato.

Adattato dalla mia risposta su Super User: https://superuser.com/a/408373/66856


Questo è ancora sbagliato: ${HOME}non funzionerà neanche. Non c'è espansione in .pam_environment.
Detly

2
@detly c'è espansione in .pam_environment, ma di HOMEsolito non è impostato così presto. Se quella riga avesse letto DEFAULT=${PATH}/Applications/jdk, avresti visto il valore di PATHinserito in essa.
Muru,
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.