diferença entre o arquivo bash.bashrc e / etc / environment

42

Até a data em que eu costumava definir minhas variáveis ​​de ambiente no bash.bashrcarquivo. Recentemente me disseram para usar o /etc/environmentarquivo. Bem, ambos funcionam bem.

Então, qual é a diferença entre eles?

Pesquisei isso no Google e descobri que "o bashrc é usado para usuários e ambientes específicos, em todo o sistema". O que se entende por sistema amplo aqui? /etc/bash.bashrctambém está aplicando alterações em todo o sistema, eu acho. Corrija-me se eu estiver enganado. Qualquer tipo de ajuda será apreciada ..

trapaank
fonte

Respostas:

35

Uma diferença é que /etc/environmentcontém apenas definições de variáveis ​​e não parece passar por nenhum tipo de expansão / interpolação de variável. Portanto, você não pode fazer referência a variáveis ​​nas definições. Por exemplo, isso não funciona:

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

B será literalmente something $A, não o esperado something else.

Veja esta pergunta .

A propósito, a resposta que você encontrou no Google parece se referir ao usuário ~/.bashrc, e não ao sistema /etc/bash.bashrc. Isso pode estar causando sua confusão.

roadmr
fonte
qual é o propósito do ~ / .bashrc quando existem dois arquivos que fazem a mesma coisa / etc / environment e /etc/bash.bashrc?
trapaank
6
O /etc/bash.bashrc é executado se algum usuário abrir um bash. O ~ / .bashrc é executado apenas se o proprietário do diretório inicial onde está salvo abrir um bash.
André Stannek
18

O /etc/environmentarquivo define a variável do sistema para todo usuário na inicialização. Os comandos no /etc/bash.bashrcare são executados se o bashshell for aberto por qualquer usuário. Portanto, as variáveis ​​não seriam definidas a menos que um bashshell seja aberto pelo menos uma vez.

André Stannek
fonte
Desculpe, eu sou novato no Linux. o shell bash será aberto? e outra coisa, quando o bash shell for aberto, substituirá a variável definida no / etc / enviornment ou não?
trapaank
Não tenho certeza de quando o / etc / environment é executado exatamente, mas o /etc/bash.bashrc é executado pelo Ubuntu quando você entra no ambiente da área de trabalho. É por isso que funciona se você definir as variáveis ​​lá. Meu palpite é que o / etc / environment seja executado uma vez durante a inicialização antes de você entrar na área de trabalho e que a execução do /etc/bash.bashrc substitua as variáveis. Mas mais uma vez: não tenho certeza disso.
André Stannek
4
É no login, não na inicialização!
quer
6

E como você está perguntando sobre o " sistema amplo ":

Os arquivos de configuração localizados no /etcdiretório se aplicam a todos os usuários no sistema. Pois /etc/bash.bashrcisso significaria para todos e para todos que estão usando o "Borne Again SHell", também conhecido como Bash, nessa máquina. Mesmo se você for o único humano a usá-lo, pode haver "usuários técnicos" afetados (basta dar uma olhada no /etc/passwde verificar com que frequência o termo "/ bin / bash" é indicado lá - ou usar grep bash /etc/passwd | wc -l, o que deve fornecer a você esse número diretamente (ou seja: "pegue" todas as linhas que contêm a cadeia "bash" do arquivo "/ etc / passwd" e envie os resultados ("|") ao comando "wc" (contagem de palavras) para contar as linhas ("-eu").

Portanto, para o seu usuário, é muito mais seguro modificar ~/.bashrc(o arquivo ".bashrc" - com um ponto inicial, sim - no diretório inicial, por exemplo /home/ankur/.bashrc), o que afeta apenas o usuário e deixa todo o resto em paz . Os arquivos /etcdevem ser alterados apenas se as alterações em todo o sistema forem realmente planejadas.

Além disso: Ambas as configurações serão usadas se existirem. Primeiro, o arquivo de todo o sistema (aqui /etc/bash.bashrc:) é lido e "originado" (são as configurações aplicadas à sessão atual) e, em seguida, os usuários /home/username/.bashrcsão tratados da mesma forma, e, portanto, podem adicionar ou mesmo alterar / substituir configurações do global /etc/bash.bashrcArquivo.

Izzy
fonte
3

Além da discussão em todo o sistema e no escopo do usuário, uma diferença mais significativa /etc/environmenté que não é um script que não seja ~/.bashrc.

Você não pode desreferenciar a variável interna /etc/environment, sua atribuição de variável que leva o valor da linha literalmente (como já mencionado pelo roadmr).

Seu Ubuntu o trancará se você estragar tudo por $PATHdentro /etc/environment, tentando acrescentar um novo caminho

PATH=$PATH:/new_path

Se a sua página de login no Ubuntu Gnome ou Unity falhou ao deixá-lo entrar sem reclamar a senha errada. E você modificou recentemente /etc/environment, provavelmente é o caso.

Uma correção é fazer login no console virtual CTRL+ ALT+ no F1console de login, verificar manualmente $PATHe corrigir o /etc/environmentarquivo.

De acordo com isso , /etc/environmenté carregado pela pilha do PAM, que preenche a variável de ambiente linha por linha.

legendbb
fonte
-1

A diferença entre os dois é que o /etc/enivironmentarquivo funcionará para todos os usuários, enquanto o arquivo bash.bashrc funcionará particularmente somente para esse usuário. E se você fizer algo errado no /etc/environmentarquivo, as consequências podem ser graves, enquanto você pode desfazer facilmente as alterações no arquivo bash.bashrc, copiando o conteúdo do arquivo / etc / environment. Mas a primeira preferência é dar ao bash.bashrcarquivo e depois ao arquivo / etc / environment. Não é que, se você fizer alterações no bash.bashrcarquivo, o terminal dê primeiro preferência ao arquivo do usuário local (ou seja, bash.bashrc) e depois ao arquivo principal (ou seja /etc/environment).

Pranit Bauva
fonte
Eu acho que você está confundindo arquivos ~ / .bashrc e /etc/bash.bashrc. O primeiro é local para o usuário abrir um shell, o segundo é global para todos os usuários que abrem um shell.
Dennis