Ao digitar man bash
, podemos ver
FILES
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
/etc/bash.bashrc
The systemwide per-interactive-shell startup file
/etc/bash.bash.logout
The systemwide login shell cleanup file, executed when a login shell exits
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
O que significa "per-interactive-shell"? Especialmente, o que "per" significa aqui? "per" significa "cada" aqui? Cada shell interativo? Ou significa outra coisa?
O "arquivo de inicialização individual por shell interativo" significa "o arquivo de inicialização individual para cada shell interativo"?
Os
bashrc
arquivos são usados para inicializar cada shell interativo individual.Estou um pouco incerto por que o prefixo "per-" é realmente necessário aqui, visto que a mesma situação também é verdadeira para os shells de login (embora em relação a outros arquivos). Além disso, um shell não interativo usaria qualquer arquivo que
$BASH_ENV
contenha o nome do caminho ou, em outras palavras, "$BASH_ENV
é o arquivo de inicialização por shell não interativo" se você desejar.Pode ser uma tentativa de enfatizar (por qualquer motivo) que os arquivos são realmente originados para cada shell interativo.
O texto foi introduzido na versão 2.0 de
bash
(eu acredito).Duas coisas aqui. Primeiro o mais fácil:
“individual” é apenas outra palavra para “pessoal”, significando (neste caso) arquivo do diretório inicial da sua conta de usuário. Observe de fato o
~/
prefixo para todos os arquivos individuais/pessoais.Em sistemas desktop como o seu computador em casa você normalmente tem apenas uma conta de usuário, mas em computadores servidores pode haver várias contas cadastradas, e cada uma tem seu próprio diretório pessoal e, portanto, seu próprio pessoal/individual
.bash_profile
,.bashrc
, etc.Agora o difícil, e para tentar explicar isso eu preciso de um pequeno prefácio:
O Bash diferencia entre shells interativos “ login ” e “ outros ” shells interativos. (Eu não tenho experiência com outros programas como
zsh
ouksh
, mas suponho que eles também).Por exemplo, em sistemas Linux, um shell de login normalmente é apenas o primeiro que é iniciado depois que você digita (corretamente) seu nome de usuário e senha no console textual ou em uma conexão de rede como ssh.
Pelo contrário, “ outros ” shells interativos são tipicamente aqueles iniciados por uma área de trabalho gráfica quando você clica no ícone do aplicativo emulador de terminal.
Os shells interativos “ outros ” (ou seja, sem login) também são quando você subsequentemente invoca shells interativos aninhados, mesmo de um login .
Um exemplo prático deste último caso. Suponha que você esteja no prompt do primeiro shell depois de se autenticar (ou seja , fazer login ) em um computador remoto via ssh: esse é o login shell interativo demas se você digitar
bash
e pressionar Return, você iniciará um novo outro shell interativo. Você pode aninhá-los quantos quiser. Apenas, você precisa digitarexit
(ou Control-D) para cada um deles para desenrolar a pilha de shells interativos aninhados que você iniciou.A documentação do Bash informa quais arquivos são executados automaticamente na inicialização dos shells de login e quais outros arquivos na inicialização de outros shells. Há também alguns arquivos que são executados automaticamente apenas quando você encerra os shells de login , mas não quando você encerra outros shells.