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

38

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

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

Eu pesquisei isso e descobri que "o bashrc é usado para usuários e ambientes específicos, em todo o sistema". O que se entende por sistema aqui? /etc/bash.bashrc também está aplicando mudanças no sistema, eu acho. Corrija-me se eu estiver enganado. Qualquer tipo de ajuda será apreciado ..

    
por trapaank 14.06.2012 / 14:56

5 respostas

35

Uma diferença é que /etc/environment contém apenas definições de variáveis e não parece passar por nenhum tipo de expansão / interpolação de variáveis. Portanto, você não pode referenciar variáveis nas definições. Isso, por exemplo, não funcionará:

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

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

Veja esta questão .

A propósito, a resposta encontrada por meio do Google parece estar se referindo a um usuário ~/.bashrc , em vez do /etc/bash.bashrc em todo o sistema. Isso pode estar causando sua confusão.

    
por roadmr 14.06.2012 / 15:43
15

O arquivo /etc/environment define a variável em todo o sistema para todos os usuários na inicialização. Os comandos no /etc/bash.bashrc são executados se o shell bash for aberto por qualquer usuário. Portanto, as variáveis não seriam definidas a menos que um shell bash fosse aberto pelo menos uma vez.

    
por André Stannek 14.06.2012 / 15:44
6

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

Os arquivos de configuração localizados no diretório /etc se aplicam a todos os usuários no sistema. Por /etc/bash.bashrc isso significaria para todos e tudo o que está usando o "Borne Again SHell", também conhecido como Bash naquela 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/passwd e verificar com que frequência o termo "/ bin / bash" é declarado lá - ou usar grep bash /etc/passwd | wc -l , que deve lhe dar esse número diretamente (ou seja: "pegar" todas as linhas contendo a string "bash" do arquivo "/ etc / passwd", e enviar os resultados ("|") para o comando "wc" (word contar) para contar as linhas ("-l").

Portanto, para o seu usuário, é muito mais seguro modificar ~/.bashrc (significando o arquivo ".bashrc" - com um ponto inicial, sim - no seu diretório home, por exemplo, /home/ankur/.bashrc ), que apenas afeta seu usuário e deixa tudo sozinho. Os arquivos em /etc só devem ser alterados se as alterações gerais do sistema forem realmente pretendidas.

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" (suas configurações são aplicadas à sessão atual) e, em seguida, os usuários /home/username/.bashrc são manipulados da mesma forma e podem adicionar ou até alterar / sobrescrever configurações do arquivo global /etc/bash.bashrc .

    
por Izzy 15.06.2012 / 17:27
3

Além da discussão sobre o escopo de todo o sistema e do usuário, uma das diferenças mais significativas é /etc/environment não é um script diferente de ~/.bashrc .

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

Seu Ubuntu irá bloqueá-lo se você estragar o $PATH dentro de /etc/environment , tentando acrescentar novo caminho

PATH=$PATH:/new_path

Se sua página de login do Ubuntu Gnome ou Unity falhou ao permitir que você entrasse sem reclamar a senha errada. E você modificou recentemente /etc/environment , provavelmente é o caso.

Uma correção é entrar no console virtual CTRL + ALT + F1 , verificar manualmente $PATH e corrigir /etc/environment arquivo.

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

    
por legendbb 11.09.2012 / 16:09
-1

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

    
por Pranit Bauva 14.06.2012 / 16:13