Por que os dois .bash_profile e .bashrc? [duplicado]

1

Qual é o sentido de ter ambos .bash_profile e .bashrc , com o primeiro normalmente obtendo o último, o que, por sua vez, origina /etc/bashrc no login? Qual seria a desvantagem de colocar tudo o que está em <.m> .bashrc em .bash_profile (ou vice-versa) e fonte apenas esse script de login?

    
por amphibient 20.02.2017 / 17:34

1 resposta

5

Apenas .bashrc é executado em shells que não são de login, enquanto apenas .bash_profile é executado em shells de login.

.bashrc normalmente deve conter itens que você deseja definir em cada shell aberto, como aliases, funções, etc. Estes são itens de sessão de shell que não são herdados do ambiente.

.bash_profile deve conter coisas que precisam ser definidas apenas no tempo de login, como o PATH e outras variáveis de ambiente, programas de inicialização, etc. Você só precisa de coisas uma vez, não em todos os shell que você abre. Na maioria dos casos, você também precisa das coisas de .bashrc em seu shell de login. É por isso que .bash_profile sources .bashrc também, mas .bashrc não costuma originar .bash_profile .

/etc/bashrc e /etc/profile são configurações do sistema feitas pelo administrador do sistema ou pelo gerenciador de pacotes. /etc/profile é originado automaticamente em cada shell de login, antes de ~/.bash_profile . /etc/bashrc não é originado, por isso precisa ser originado de ~/.bashrc quando necessário.

Agora, você pode agrupar os dois em um único arquivo e vincular o outro arquivo ao primeiro. Mas você tem que se certificar de que o PATH e outras variáveis não sejam relativas (como PATH = $ HOME / bin: $ PATH), caso contrário, elas continuarão sendo desnecessariamente maiores. Além disso, você tem que ter cuidado ao iniciar programas repetidamente. É mais fácil separar esses dois.

Seção relevante da página man bash:

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.

    
por 20.02.2017 / 18:45