shell dotfiles e * rcs: o que é uma configuração sã?

4

Um usuário do bash acabará com .bashrc , .bash_profile , .profile e talvez um pouco mais.

Agora, cada arquivo é carregado sob situações particulares, e isso leva a confusão e frustração. Eu não me importo com o que shell é um shell de login e nem você deve.

Eu só quero ter certeza de que a mesma coisa seja carregada para cada coisa que acontece.

Então, qual é a maneira sã de configurá-los?

Eu aposto que coisas não-específicas do bash entram em .profile , e algumas fontes de arquivos, etc. O que exatamente colocaria em cada um para alcançar um ambiente idêntico para cada shell?

Nota: não estou perguntando o que você gosta particularmente de colocar em seus arquivos rc, como aliases e funções e assim por diante. Exatamente como você as coloca para não ter coisas aleatoriamente divididas entre elas.

    
por kch 06.08.2009 / 10:00

2 respostas

4

I just want to make sure the same thing is loaded for every shell thing that happens.

Se você realmente quiser, coloque tudo em ~/.profile e adicione um source ~/.profile ao final de seu ~/.bashrc . Se isso é desejável é uma questão diferente. A fonte ~/.profile in ~/.bashrc é uma configuração muito comum mesmo assim.

+------------+-----------------+--------------------+
|            | login shells    | interactive shells |
+------------+-----------------+--------------------|
| all        | /etc/profile    |                    |
| bourneish  | ----------------+--------------------|
| shells     | ~/.profile      |                    |
+------------+-----------------+--------------------|
| just       | ~/.bash-profile | /etc/bash.bashrc   |
|            | -------------------------------------|
| bash       | ~/.bash-login   | ~/.bashrc          |
+------------+-----------------+--------------------+

C shell e shells derived usam um conjunto diferente de arquivos (.login, .cshrc, ..).

What exactly would in put in each to achieve an identical environment for every shell?

Se você quer dizer ambiente no sentido de variáveis de ambiente, basta definir todos eles em ~ / .profile e você está OK. Se você quer dizer meio ambiente em um sentido mais amplo, isso depende.

A questão aqui é que não é desejável ter o mesmo ambiente para shells interativos e de login. Um exemplo é o alias: talvez você queira aliases no seu shell interativo, mas muito provavelmente eles farão com que seus scripts façam coisas estranhas. Então você não quer seus aliases em shells não interativos = > coloque-os em ~./bashrc .

    
por 06.08.2009 / 13:58
0

Eu corrijo as coisas para que quase toda a minha configuração seja feita pelo shell de login e quase nada na base por shell. Isso significa que meu arquivo .profile é complexo; Meu arquivo .kshrc (análogo de .bashrc para Bash e .cshrc para shell C) é inexistente. Eu nunca achei que isso fosse um problema. Isso também significa que os shells que não são de login são os mais rápidos possíveis - eles não vão procurar arquivos para analisar comandos que eles não usarão. Isso pode ser uma ressaca dos dias de shell Bourne - quando os scripts por shell não existiam. Mas eu nunca encontrei nada que exigisse tal tratamento especializado.

    
por 06.08.2009 / 11:52