.bash_profilee .bashrcsão específicos para bash, enquanto .profileé lido 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; subshells somente leitura .bashrc. (Entre o controle de tarefas e os sistemas modernos de janelas, .bashrcpor si só, não é muito usado. Se você usar screenou tmux, screens/windows geralmente executam subshells em vez de shells de login.)
A ideia por trás disso era que a configuração única foi feita por .profile(ou versão específica do shell), e coisas por shell por .bashrc. Por exemplo, você geralmente deseja carregar variáveis de ambiente apenas uma vez por sessão, em vez de destruí-las sempre que iniciar um subshell em uma sessão, enquanto 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 scriptlets de shell, que são .( source)-ed de /etc/profile; os fragmentos aqui são por shell, *.shaplicando-se a todos os shells compatíveis com Bourne/POSIX e outras extensões aplicáveis a esse shell específico.
.profileé para coisas que não estão especificamente relacionadas ao 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 de área de trabalho gráfica.
.bashrc
.bashrcé para configurar o uso interativo do Bash, como aliases do Bash, configurar seu editor favorito, configurar o prompt do Bash, etc.
.bash_profile
.bash_profileé para certificar-se de que ambas as coisas .profilee .bashrcsão carregadas para shells de login .
Por exemplo, .bash_profilepode ser algo simples como
. ~/.profile
. ~/.bashrc
Se você omitir .bashrc, somente .profileserá carregado.
De acordo com a página man do bash, .bash_profileé executado para shells de login, enquanto .bashrcé executado para shells interativos sem login.
Então, o que é um shell de login ou não-login?
Quando você faz login (digite nome de usuário e senha) via 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 em sua máquina e abriu uma nova janela de terminal (xterm) dentro do Gnome ou KDE, então .bashrcé executado antes do prompt de comando da janela. .bashrctambém é executado quando você inicia uma nova instância do bash digitando /bin/bashem um 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 .bash_profileem vez de .bashrc. Outros emuladores de terminal GUI podem fazer o mesmo, mas a maioria tende a não fazer isso.
Recorri à página man para esta resposta ( man bash).
Os três arquivos são todos usados pelo bash em diferentes cenários.
Cenário 1 : shell de login interativo
(interativo significa que você pode fazer a entrada do usuário. Observe que isso NÃO inclui cron jobs! Um shell de login é o primeiro shell que é gerado quando você faz login, mas não inclui sub-shells) Então, basicamente, este é o prompt de comando você acerta ao fazer o login. O que o bash fará? Bash lê /etc/profile todas as vezes. Em seguida, ele procura por ~/.bash_profile. Se não existir, ele procura ~/.bash_login. Se isso não existir, ele procurará por ~/.profile. Mas ele lerá apenas um de .bash_profile, .bash_login e .profile. Portanto, ele será encerrado depois de encontrar um e lê-lo.
Cenário 2 : não-login interativo
(Este é um shell que é iniciado após o primeiro shell de login. Este shell é aquele que permite a entrada do usuário). Quando um shell interativo sem login é iniciado: Bash apenas lê /etc/bash.bashrc e ~/.bashrc.
Cenário 3 : shell não interativo
(por exemplo, cronjob) Quando não interativo, ele não carrega nenhum dos arquivos. Mas, ele procura por uma variável de ambiente chamada BASH_ENV que supostamente contém o caminho para um arquivo que será executado. Portanto, neste caso, ele não lê nenhum dos arquivos ~/.profile ou ~/.bash_profile, a menos que você defina explicitamente o BASH_ENV para um caminho absoluto. Eu acredito que é por isso que você deve sempre especificar o caminho absoluto em qualquer cronjobs porque nenhum dos arquivos de configuração é executado por padrão.
.bash_profile
e.bashrc
são específicos parabash
, enquanto.profile
é lido por muitos shells na ausência de seus próprios arquivos de configuração específicos do shell. (.profile
foi usado pelo shell Bourne original.).bash_profile
ou.profile
é lido por shells de login, junto com.bashrc
; subshells somente leitura.bashrc
. (Entre o controle de tarefas e os sistemas modernos de janelas,.bashrc
por si só, não é muito usado. Se você usarscreen
outmux
, screens/windows geralmente executam subshells em vez de shells de login.)A ideia por trás disso era que a configuração única foi feita por
.profile
(ou versão específica do shell), e coisas por shell por.bashrc
. Por exemplo, você geralmente deseja carregar variáveis de ambiente apenas uma vez por sessão, em vez de destruí-las sempre que iniciar um subshell em uma sessão, enquanto 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.profile
para configuração em todo o sistema e, da mesma forma,/etc/bashrc
em subshells (sem fallback para este). Muitos sistemas, incluindo o Ubuntu, também usam um/etc/profile.d
diretório contendo scriptlets de shell, que são.
(source
)-ed de/etc/profile
; os fragmentos aqui são por shell,*.sh
aplicando-se a todos os shells compatíveis com Bourne/POSIX e outras extensões aplicáveis a esse shell específico..profile
.profile
é para coisas que não estão especificamente relacionadas ao Bash, como variáveis de ambientePATH
e amigos, e devem estar disponíveis a qualquer momento.Por exemplo,
.profile
também deve ser carregado ao iniciar uma sessão de área de trabalho gráfica..bashrc
.bashrc
é para configurar o uso interativo do Bash, como aliases do Bash, configurar seu editor favorito, configurar o prompt do Bash, etc..bash_profile
.bash_profile
é para certificar-se de que ambas as coisas.profile
e.bashrc
são carregadas para shells de login .Por exemplo,
.bash_profile
pode ser algo simples comoSe você omitir
.bashrc
, somente.profile
será carregado.De acordo com a página man do bash,
.bash_profile
é executado para shells de login, enquanto.bashrc
é executado para shells interativos sem login.Então, o que é um shell de login ou não-login?
Quando você faz login (digite nome de usuário e senha) via 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 em sua máquina e abriu uma nova janela de terminal (xterm) dentro do Gnome ou KDE, então.bashrc
é executado antes do prompt de comando da janela..bashrc
também é executado quando você inicia uma nova instância do bash digitando/bin/bash
em um 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
.bash_profile
em vez de.bashrc
. Outros emuladores de terminal GUI podem fazer o mesmo, mas a maioria tende a não fazer isso.Mais em: .bash_profile vs .bashrc - por Josh Staiger .
Recorri à página man para esta resposta (
man bash
).Os três arquivos são todos usados pelo bash em diferentes cenários.
Cenário 1 : shell de login interativo (interativo significa que você pode fazer a entrada do usuário. Observe que isso NÃO inclui cron jobs! Um shell de login é o primeiro shell que é gerado quando você faz login, mas não inclui sub-shells) Então, basicamente, este é o prompt de comando você acerta ao fazer o login. O que o bash fará? Bash lê /etc/profile todas as vezes. Em seguida, ele procura por ~/.bash_profile. Se não existir, ele procura ~/.bash_login. Se isso não existir, ele procurará por ~/.profile. Mas ele lerá apenas um de .bash_profile, .bash_login e .profile. Portanto, ele será encerrado depois de encontrar um e lê-lo.
Cenário 2 : não-login interativo (Este é um shell que é iniciado após o primeiro shell de login. Este shell é aquele que permite a entrada do usuário). Quando um shell interativo sem login é iniciado: Bash apenas lê /etc/bash.bashrc e ~/.bashrc.
Cenário 3 : shell não interativo (por exemplo, cronjob) Quando não interativo, ele não carrega nenhum dos arquivos. Mas, ele procura por uma variável de ambiente chamada BASH_ENV que supostamente contém o caminho para um arquivo que será executado. Portanto, neste caso, ele não lê nenhum dos arquivos ~/.profile ou ~/.bash_profile, a menos que você defina explicitamente o BASH_ENV para um caminho absoluto. Eu acredito que é por isso que você deve sempre especificar o caminho absoluto em qualquer cronjobs porque nenhum dos arquivos de configuração é executado por padrão.
Aqui está minha fonte
De bash(1) - página de manual do Linux