Referenziare variabili d'ambiente * in * / etc / environment?

18

Recentemente ho scoperto /etc/environment , che sembra un modo più standard per impostare variabili di ambiente semplici rispetto agli script, ma mi chiedevo se esistesse un modo per fare riferimento alle variabili di ambiente di riferimento nel file / etc / environment.

Cioè, ho questo:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Se provo ad aggiungere $JAVA_HOME/bin alla definizione PATH, tuttavia, ottengo $ JAVA_HOME / bin, e non la variabile interpolata. Per rimediare, sto creando environment.sh in profile.d per aggiungere le voci /bin al percorso, ma questo sembra sciatto e disorganizzato.

C'è un modo per retrocedere le variabili d'ambiente in / etc / environment?

    
posta Stefan Kendall 13.11.2011 - 17:38

2 risposte

12

Il file /etc/environment viene letto dal pam_env modulo PAM . Supporta solo coppie chiave-valore semplici, senza sostituzione sul lato destro.

Se vuoi costruire il valore con sostituzioni o altre espansioni di shell, devi passare attraverso una shell. /etc/profile (o un file in /etc/profile.d ) è il posto giusto per questi. Questo è il luogo tradizionale ( /etc/environment è un'innovazione relativamente recente, nella storia dei sistemi unix), e non c'è certamente nulla di sciatto nell'usarlo. Il vantaggio principale di /etc/environment è che consente di impostare le variabili di ambiente anche con metodi di accesso che non implicano una shell o per gli utenti che utilizzano una shell non Bourne, ma in pratica non sono comuni.

    
risposta data Gilles 13.11.2011 - 18:10
2

La documentazione di Ubuntu lo rende impossibile. MA, c'è una risposta.

ANSWER : crea variabili di ambiente persistenti a livello di sistema in /etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

Dettagli:
Ecco alcuni ulteriori dettagli della documentazione sulle variabili d'ambiente .
La raccomandazione ufficiale è di usare /etc/environment , come hai provato. Il problema è che questo file non è un file di script. In altre parole, non è possibile utilizzare le variabili nelle dichiarazioni delle variabili.

La documentazione continua con altri 2 file "Not Recommended", /etc/profile e /etc/bash.bashrc .

/etc/profile "fa poco più che invocare il file /etc/bash.bashrc". Quindi scegli invece

/etc/bash.bashrc perché "Ubuntu è configurato per impostazione predefinita per eseguire questo file ogni volta che un utente inserisce una shell o l'ambiente desktop."

    
risposta data csi 02.12.2013 - 16:59

Leggi altre domande sui tag