Quando devo usar .bashrc e quando .profile? [duplicado]

0

Eu basicamente coloco todas as minhas configurações no meu .bashrc e quando eu estava usando o zsh ele estava todo no meu .zshrc.

O instalador do Rust acabou de me informar que adicionou a nova instalação ao meu PATH, modificando .profile.

Quando as coisas devem entrar em ~/.profile ?

É só isso porque não sabe qual shell estou usando ou todas as configurações gerais devem estar em .profile?

    
por Franklin 19.10.2018 / 19:20

2 respostas

1

.profile é lido por cada shell de login, .xxxrc é lido por cada shell interativo depois de ler .profile .

Você precisa se decidir dependendo do que gosta de adicionar.

Uma boa ideia é colocar tudo o que define variáveis de ambiente exportadas e, assim, propaga-se para sub-shells em .profile.

As coisas que não são propagadas devem estar em .bashrc ou qualquer que seja o seu shell. Isto é, e. alias e definições de funções.

    
por 19.10.2018 / 19:25
2

O Bash tem uma lógica bastante complicada em quais scripts ele é executado e quando.

Mas na maior parte se resume a:

  • se você tiver configurações que são herdadas do processo pai para filho (variáveis de ambiente, ulimit s), geralmente é necessário defini-las apenas uma vez em cada login, para que seja mais eficiente para colocá-los em .profile em vez de .bashrc .
  • se você tiver configurações que sejam herdadas e aditivas (por exemplo, adicionando algo ao valor existente de PATH com uma construção como PATH=$PATH:/some/directory ), essa configuração em .bashrc faria com que essa adição acontecesse uma segunda vez sempre que você iniciasse outro processo de shell, o que seria tolo e um desperdício. Por exemplo, se você definir PATH=$PATH:/some/directory em .bashrc , ele funcionará bem no seu shell principal. Mas quando você inicia um editor e, em seguida, usa sua funcionalidade de escape de shell, você pode descobrir que seu PATH agora tem um valor como ...:/some/directory:/some/directory . Cada camada de shells filho adicionaria o diretório ao PATH outra vez. Configurações hereditárias e aditivas geralmente são melhor colocadas em .profile .
  • se você tiver configurações não herdadas entre processos regulares, como aliases ou funções de shell, você deverá defini-las em .bashrc . Se você os definisse em .profile , você poderia encontrá-los não disponíveis em shells que começaram a usar a funcionalidade de escape de shell em vários aplicativos. (Isso também significa que você provavelmente desejará adicionar um comando para originar seu .bashrc no final de seu .profile , para que o shell de login principal da sessão também obtenha essas definições, a menos que o padrão% da distribuição seja/etc/profile ou padrão .profile já fornece essa funcionalidade.)

Com a interface gráfica do usuário, há mais uma complicação. A sessão da GUI normalmente fornecerá o conteúdo de .profile ou equivalente no login (porque o respectivo script de inicialização da sessão é executado como um shell de login), portanto, quaisquer configurações herdáveis feitas geralmente serão herdadas pelo ambiente de desktop e Por sua vez, qualquer aplicativo que é iniciado usando ícones da área de trabalho ou menus.

Todas as janelas de terminal dentro de uma sessão X11 GUI podem ser configuradas de duas maneiras:

  • sessões de terminal completamente independentes: cada janela de terminal é tratada como uma sessão de login independente e o ambiente é construído a partir de alguns padrões básicos do sistema para o shell dentro do processo do emulador de terminal. Nesse caso, cada nova janela de terminal será executada como um shell de login e, portanto, executará .profile ou equivalente quando aberta.
  • cada janela de terminal é tratada como parte da sessão de login da GUI principal: nesse caso, as shells dentro das janelas de terminal são iniciadas como shells de não-login e só executam .bashrc ou equivalente. As configurações herdáveis são herdadas da sessão principal de login da GUI, por meio dos processos do gerenciador de ambiente / janela da área de trabalho.
por 22.10.2018 / 00:47

Tags