Quais são as diferenças funcionais entre .profile .bash_profile e .bashrc

182

Quais são as diferenças funcionais entre os arquivos .profile, .bash_profilee .bashrc?

lollercoaster
fonte

Respostas:

151

.bash_profilee .bashrcsão específicos bash, considerando que .profilesão lidos por muitos shells na ausência de seus próprios arquivos de configuração específicos do shell. ( .profilefoi usado pelo shell Bourne original.) .bash_profileou .profileé lido por shells de login, junto com .bashrc; subcascas somente leitura .bashrc. (Entre o controle de tarefas e os modernos sistemas de janelas, .bashrcpor si só não se acostuma muito. Se você usa screenou tmux, as telas / janelas geralmente executam subshells em vez de shells de login.)

A idéia por trás disso era que a configuração única era feita por .profile(ou sua versão específica do shell) e as coisas por shell da .bashrc. Por exemplo, você geralmente deseja carregar variáveis ​​de ambiente apenas uma vez por sessão, em vez de fazê-las bater sempre que iniciar um subshell dentro de uma sessão, enquanto você sempre deseja seus aliases (que não são propagados automaticamente como as variáveis ​​de ambiente).

Outros arquivos de configuração de shell notáveis:

/etc/bash_profile(fallback /etc/profile) é lido antes do usuário .profilepara configuração em todo o sistema e da mesma forma /etc/bashrcem subshells (sem fallback para este). Muitos sistemas, incluindo o Ubuntu, também usam um /etc/profile.ddiretório contendo shell scriptlets, os quais são .( source) -ed /etc/profile; os fragmentos aqui são por shell, com *.shaplicação a todos os shells compatíveis com Bourne / POSIX e outras extensões aplicáveis ​​a esse shell em particular.

geekosaur
fonte
58

.perfil

.profileé para coisas que não estão especificamente relacionadas Bash, como variáveis ​​de ambiente PATHe amigos, e devem estar disponíveis a qualquer momento.

Por exemplo, .profiletambém deve ser carregado ao iniciar uma sessão gráfica da área de trabalho.


.bashrc

.bashrcé para configurar o uso interativo do Bash, como Bash aliasesdefinir seu favorito editor, definir Bash promptetc.


.bash_profile

.bash_profile destina-se a garantir que ambas as coisas sejam carregadas .profilee .bashrccarregadas login shells.

Por exemplo, .bash_profilepoderia ser algo simples como

. ~/.profile
. ~/.bashrc

Se você omitir .bashrc, somente .profileserá carregado.

MangeshBiradar
fonte
1
Isso respondeu à minha pergunta no Mac OS X
Jake Toronto
38

De acordo com a página do manual bash, .bash_profileé executado para shells de logon, enquanto .bashrcé executado para shells interativos sem logon.

Então, o que é um shell de login ou não-login?

Quando você faz login (digite nome de usuário e senha) no console, sentado na máquina ou remotamente via ssh: .bash_profileé executado para configurar seu shell antes do prompt de comando inicial. Mas, se você já fez login na sua máquina e abre uma nova janela de terminal (xterm) dentro do Gnome ou KDE, .bashrcé executada antes do prompt de comando da janela. .bashrctambém é executado quando você inicia uma nova instância do bash digitando /bin/bashum terminal.

Uma exceção às diretrizes da janela do terminal é o Terminal.app do Mac OS X, que executa um shell de login por padrão para cada nova janela do terminal, chamando em .bash_profilevez de .bashrc. Outros emuladores de terminal da GUI podem fazer o mesmo, mas a maioria costuma não fazer.

Mais aqui .

Paulecci
fonte