Risposte:
L' /etc/environment
aggiornamento funzionerà solo nella sessione successiva, non verrà ricaricato automaticamente.
Ciò significa che non è possibile modificarlo per le sessioni che sono già state avviate per altri utenti.
Se vuoi "ricaricare" qualunque cosa sia contenuta, /etc/environment
hai bisogno del seguente comando:
source /etc/environment
Ma ancora funzionerà solo per la tua sessione corrente, gli altri utenti non saranno interessati fino a quando non avvieranno una nuova sessione o eseguiranno il comando sopra nella loro sessione.
Questi file di configurazione, sia globali ( /etc/environment
, /etc/profile
) che specifici dell'utente ( ~/.profile
, ~/.bashrc
) , vengono elaborati solo al successivo accesso / sessione.
I file globali si applicano a tutti gli utenti (non solo root) ... ma è necessario riavviare la sessione di accesso per vedere le modifiche riflesse nell'ambiente. Questo può accadere chiamando su
come hai osservato ... o disconnettendosi / eseguendo il riavvio. Potresti avere su
un utente non root e vedresti che hanno anche le modifiche all'ambiente.
Il motivo per cui è necessario riavviare o accedere nuovamente per ottenere l'ambiente globale è perché l'ambiente è ereditato dai processi padre e il processo di root per tutto il resto che si esegue è la shell di accesso ... quindi se la shell di accesso non ha l'ambiente ... quindi nemmeno i processi sono stati avviati all'interno della shell di accesso. Ovviamente è possibile impostare / aggiornare l'ambiente per i singoli processi all'avvio, ma è necessario impostare l'ambiente per la shell di accesso e riavviare tutti i processi secondari affinché possano vedere la modifica.
Come qualcun altro ha detto, è necessario un riavvio o logout / login per le modifiche /etc/profile
, /etc/profile.d/*.sh
e /etc/environment
per essere prelevati.
Questo perché mentre questi file specificano l'ambiente globale ... vengono eseguiti solo una volta all'accesso e quindi gli accessi / le sessioni esistenti non riflettono le modifiche a quei file. Un riavvio "reimposta" l'accesso di tutti costringendoli a prelevare il nuovo ambiente.
Nella tua sessione di accesso è possibile source /etc/profile
per raccogliere le modifiche senza riavviare o disconnettersi / accedere ... ma ciò influirà solo sulla propria sessione e sui nuovi processi in esecuzione all'interno della sessione.
Nota anche che non c'è interpolazione variabile in /etc/environment
(non è uno script) quindi non puoi fare cose come quelle PATH="$PATH:/my/custom/path"
.
Si noti inoltre che /etc/profile
e /etc/profile.d/*.sh
vengono eseguiti solo per sessioni di accesso e pertanto l'ambiente configurato non sarà disponibile per gli account di sistema non di accesso (ovvero se si sta tentando di impostare una variabile ambientale per un processo daemon che viene eseguito al di fuori della shell di accesso).
Nota che bashrc
non è utile per impostare l'ambiente per l'intera shell di accesso, ma per shell e processi secondari bash ... quindi per veri "globali" o "utenti globali" probabilmente vorrai inserire la configurazione del tuo ambiente in /etc/profile
o /etc/profile.d/my-custom-env.sh
o ~/.profile
. Altre shell (ad es. Zsh) hanno i propri file di configurazione, quindi una configurazione di ambiente non specifica bash in una bashrc causerà problemi o confusione se / quando si cambiano le shell (o si hanno altri utenti sul sistema che usano shell diverse).
È un problema comune installare un nuovo programma e è necessario specificare un ambiente per il corretto funzionamento. L'ambiente globale è una risposta, ma spesso richiederà un riavvio che non è l'ideale per i server e il provisioning automatico / la configurazione dei casi d'uso. Dovresti chiederti se questa è davvero una variabile di cui hanno bisogno tutti gli utenti e i programmi sul sistema o se è davvero solo qualcosa che devi mettere a disposizione di un utente o programma specifico.
guarda includendo l'ambiente nel profilo o bashrc nella home directory dell'utente (ad es. ~/.profile
~/.bashrc
) a seconda che tu lo voglia per interattivo, shell di login, solo bash, ecc.
Tenere presente che ciò richiede anche un riavvio o il logout / login affinché le modifiche all'ambiente siano disponibili per tutti i processi all'interno della sessione di accesso dell'utente. L'utente può source ~/.profile
... ma ciò avviene all'interno di un terminale e aggiorna solo l'ambiente all'interno di quella sessione del terminale e i processi figlio ... non necessariamente per l'intero ambiente di accesso dell'utente.
Uno è fornire semplicemente l'ambiente quando si esegue il comando:
VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2
Se si utilizza systemd è inoltre possibile specificare l'ambiente nel file unità / servizio in [Service]
conEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE
Questa opzione potrebbe sembrare goffa perché devi specificare l'ambiente ogni volta che esegui un programma, ma se l'ambiente è veramente necessario solo per quel programma ... questo è davvero il modo migliore e dovresti abituarti e non scaricare tutto in un file di base o di profilo.
Se non stai usando systemd o init per configurare l'ambiente ed eseguire il programma ... ovviamente puoi anche concludere l'esecuzione del programma con uno script bash in cui salvi il comando completo inclusa l'installazione dell'ambiente per comodità.
C'è anche una risposta molto dettagliata qui che ti suggerisco di leggere: /ubuntu//a/247769/824160
creare uno script di shell personalizzato in
/etc/profile.d/
aggiungi le variabili di ambiente globali all'interno dello script creato, riavvia la macchina e sarà disponibile per tutti.
L'aggiunta di una variabile /etc/environment
ha funzionato per me.
Tuttavia, ho dovuto riavviare dopo /etc/environment
la modifica per rendere effettive le modifiche. La semplice chiusura e riapertura della finestra del terminale non era sufficiente.
source /etc/environment
per ricaricarlo.