Impostazione della variabile d'ambiente globale per tutti


17

Se imposto una variabile in /etc/environment, sembra che si applichi solo agli amministratori mentre è in sudo su.

Come posso ottenere le variabili da applicare a tutti? Soprattutto quando sono nel terminal? Le impostazioni /etc/enviromentnon si applicano a bash?

Risposte:


13

L' /etc/environmentaggiornamento 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/environmenthai 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.


4

TL; DR

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 sucome hai osservato ... o disconnettendosi / eseguendo il riavvio. Potresti avere suun 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.

Ambiente globale

Come qualcun altro ha detto, è necessario un riavvio o logout / login per le modifiche /etc/profile, /etc/profile.d/*.she /etc/environmentper 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/profileper 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/profilee /etc/profile.d/*.shvengono 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 bashrcnon è 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/profileo /etc/profile.d/my-custom-env.sho ~/.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.

Per utenti specifici

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.

Per un programma specifico ci sono un paio di opzioni.

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à.

Riferimenti:

C'è anche una risposta molto dettagliata qui che ti suggerisco di leggere: /ubuntu//a/247769/824160


3

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.


Credo che questo sia un approccio più affidabile rispetto alla modifica del file / etc / environment in quanto tale file può essere modificato con l'aggiornamento dei pacchetti.
concordato il

2

L'aggiunta di una variabile /etc/environmentha funzionato per me.

Tuttavia, ho dovuto riavviare dopo /etc/environmentla modifica per rendere effettive le modifiche. La semplice chiusura e riapertura della finestra del terminale non era sufficiente.


3
Puoi sempre fare un source /etc/environmentper ricaricarlo.
Panthro,

Disconnettersi e riconnettersi dovrebbe essere sufficiente.
Karuhanga,
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.