differenza tra bash.bashrc e / etc / environment file


42

Fino alla data in cui ho usato per impostare le variabili di ambiente nel bash.bashrcfile. Recentemente mi è stato detto di usare il /etc/environmentfile. Bene, entrambi funzionano bene.

Quindi, qual è la differenza tra loro?

Ho cercato su Google e ho trovato "bashrc è usato per utenti e ambienti particolari, a livello di sistema". Cosa si intende per sistema a livello globale qui? /etc/bash.bashrcsto anche applicando modifiche a livello di sistema, suppongo. Correggimi se sbaglio. Qualsiasi tipo di aiuto sarà apprezzato ..

Risposte:


35

Una differenza è che /etc/environmentcontiene solo definizioni di variabili e non sembra attraversare alcun tipo di espansione / interpolazione variabile. Pertanto, non è possibile fare riferimento a variabili nelle definizioni. Questo ad esempio non funzionerà:

A="else"
B="something $A"

B sarà letteralmente something $A, non il previsto something else.

Vedere questa domanda .

A proposito, la risposta che hai trovato tramite Google sembra riferirsi a un utente ~/.bashrc, piuttosto che a livello di sistema /etc/bash.bashrc. Ciò potrebbe causare confusione.


qual è lo scopo di ~ / .bashrc quando ci sono due file che fanno la stessa cosa / etc / environment e /etc/bash.bashrc?
trapaank,

6
Il file /etc/bash.bashrc viene eseguito se un utente apre una bash. ~ / .Bashrc viene eseguito solo se il proprietario della home directory in cui viene salvato apre un bash.
André Stannek,

18

Il /etc/environmentfile imposta la variabile di sistema per ogni utente all'avvio. I comandi in /etc/bash.bashrcare vengono eseguiti se la bashshell viene aperta da qualsiasi utente. Quindi le variabili non verrebbero impostate a meno che una bashshell non venga aperta almeno una volta.


Mi dispiace, sono un novizio di Linux. quale shell bash verrà aperta? e un'altra cosa quando si apre la shell bash sovrascriverà la variabile impostata in / etc / enviornment o no?
trapaank,

Non sono sicuro quando / etc / environment venga eseguito esattamente ma /etc/bash.bashrc viene eseguito da Ubuntu quando si accede al proprio ambiente desktop. Ecco perché funziona se imposti le variabili lì. La mia ipotesi è che l'ambiente / etc / venga eseguito una volta durante l'avvio prima di accedere al desktop e che l'esecuzione di /etc/bash.bashrc sovrascriva le variabili. Ma ancora una volta: non ne sono sicuro.
André Stannek,

4
È all'accesso, non all'avvio!
slm,

6

E come stai chiedendo "a livello di sistema ":

I file di configurazione che si trovano nella /etcdirectory si applicano a tutti gli utenti del sistema. Per /etc/bash.bashrcquesto significherebbe per tutti e tutto ciò che sta usando "Borne Again SHell" alias Bash su quella macchina. Anche se sei l'unico essere umano ad usarlo, potrebbero esserci degli "utenti tecnici" interessati (basta dare un'occhiata a /etc/passwde verificare la frequenza in cui il termine "/ bin / bash" è indicato lì - o usare grep bash /etc/passwd | wc -l, che dovrebbe darti quel numero direttamente (che significa: "prendi" tutte le righe contenenti la stringa "bash" dal file "/ etc / passwd" e invia i risultati ("|") al comando "wc" (conteggio parole) per contare le righe ( "-l").

Quindi, per il tuo utente, è molto più sicuro modificarlo ~/.bashrc(ovvero il file ".bashrc" - con un punto iniziale, sì - nella tua directory home, ad esempio /home/ankur/.bashrc), che quindi influenza solo il tuo utente e lascia tutto il resto da solo . I file in /etcdevono essere modificati solo se si intendono davvero modifiche a livello di sistema.

Inoltre: se esistenti, verranno utilizzate entrambe le configurazioni. Innanzitutto, il file a livello di sistema (qui /etc/bash.bashrc:) viene letto e "di provenienza" (le impostazioni vengono applicate alla sessione corrente), quindi gli utenti /home/username/.bashrcvengono gestiti allo stesso modo e quindi possono aggiungere o persino modificare / sovrascrivere le impostazioni dal globale /etc/bash.bashrcfile.


3

Oltre alla discussione a livello di sistema e di portata dell'utente, una differenza più significativa non/etc/environment è uno script diverso da .~/.bashrc

Non è possibile dereferenziare la variabile all'interno /etc/environment, la sua assegnazione di variabili che assume letteralmente il valore di linea (come già menzionato da roadmr).

Ubuntu ti bloccherà se rovini l' $PATHinterno /etc/environmentcercando di aggiungere un nuovo percorso

PATH=$PATH:/new_path

Se la tua pagina di login di Ubuntu Gnome o Unity non è riuscita a farti entrare senza lamentarti di una password errata. E hai recentemente modificato /etc/environment, molto probabilmente è il caso.

Una correzione è quella di accedere alla console virtuale CTRL+ ALT+ F1console di accesso, controllare manualmente $PATHe correggere il /etc/environmentfile.

In base a ciò , /etc/environmentviene caricato dallo stack PAM, che popola la variabile di ambiente riga per riga.


-1

La differenza tra i due è che il /etc/enivironmentfile funzionerà per tutti gli utenti mentre il file bash.bashrc funzionerà in particolare solo per quell'utente. E se fai qualcosa di sbagliato nel /etc/environmentfile, le conseguenze potrebbero essere gravi mentre puoi facilmente annullare le modifiche nel file bash.bashrc copiando il contenuto del file / etc / environment. Ma la prima preferenza è dare al bash.bashrcfile e quindi al file / etc / environment. Non è che se si apportano modifiche al bash.bashrcfile, il terminale darà prima la preferenza al file utente locale (cioè, bash.bashrc) e quindi al file principale (cioè, /etc/environment).


Penso che stai confondendo i file ~ / .bashrc e /etc/bash.bashrc. Il primo è locale per l'utente che apre una shell, il secondo è globale per tutti gli utenti che aprono una shell.
Dennis,
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.