.bashrc
e NÃO.bash_profile
são scripts. São arquivos de configuração que são obtidos toda vez que são executados de duas maneiras:bash
A seção INVOCATION da página de manual do bash é relevante.
Um shell de login é aquele cujo primeiro caractere do argumento zero é a -
ou iniciou com a --login
opção
Um shell interativo é aquele iniciado sem argumentos de não opção e sem a -c
opção cuja entrada e erro padrão estão conectados aos terminais (conforme determinado por isatty(3))
ou iniciado com a -i
opção. PS1 é definido e $-
inclui i
se bash
é interativo, permitindo um script de shell ou um arquivo de inicialização para testar esse estado.
Os parágrafos a seguir descrevem como bash
executa seus arquivos de inicialização. Se algum dos arquivos existir, mas não puder ser lido, o bash reportará um erro. Tildes são expandidos em nomes de arquivos, conforme descrito abaixo em
Expansão Tilde na seção EXPANSÃO .
Quando o bash é chamado como um shell de logon interativo ou como um shell não interativo com a --login
opção, ele primeiro lê e executa comandos do arquivo /etc/profile
, se esse arquivo existir. Depois de ler esse arquivo, ele procura ~/.bash_profile
,
~/.bash_login
e ~/.profile
, nessa ordem, e lê e executa os comandos do primeiro que existe e é legível. A
--noprofile
opção pode ser usada quando o shell é iniciado para inibir esse comportamento.
Quando um shell de login sai, o bash lê e executa comandos do arquivo ~/.bash_logout
, se existir.
Quando um shell interativo que não é um shell de login é iniciado, o bash lê e executa comandos de ~/.bashrc
, se esse arquivo existir. Isso pode ser inibido usando a --norc
opção A --rcfile file
opção forçará o bash a ler e executar comandos do arquivo em vez de ~/.bashrc
.
Você pode controlar quando eles são carregados pelas opções da linha de comando --norc
e --noprofile
. Você também pode substituir o local de onde eles são carregados usando o --rcfile
comutador.
Como outros já mencionaram, você pode imitar como esses arquivos são carregados através do uso do source <file>
comando ou do uso do . <file>
comando.
É melhor pensar nessa funcionalidade da seguinte maneira:
- bash começa com um ambiente vazio
- o bash abre um desses arquivos (dependendo de como foi chamado como interativo ou de login e, em seguida ...
- ... linha por linha executa cada um dos comandos dentro do arquivo ...
- quando concluído, dá o controle sob a forma de um prompt, aguardando a entrada
Métodos para invocar
Este tópico parece surgir de vez em quando, então aqui está uma pequena tabela de dicas sobre as várias maneiras de invocar bash
e o que elas resultam. NOTA: Para ajudar, adicionei as mensagens "sourced $ HOME / .bashrc" e "sourced $ HOME / .bash_profile "nos respectivos arquivos.
chamadas básicas
bash -i
$ bash -i
sourced /home/saml/.bashrc
bash -l
$ bash -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -il -ou- bash -li
$ bash -il
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -c "..cmd .."
$ bash -c 'echo hi'
hi
NOTA: Observe que a -c
opção não originou nenhum arquivo!
desativando arquivos de configuração de serem lidos
bash --norc
$ bash --norc
bash-4.1$
bash --noprofile
$ bash --noprofile
sourced /home/saml/.bashrc
bash --norc -i
$ bash --norc -i
bash-4.1$
bash --norc -l
$ bash --norc -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash --noprofile -i
$ bash --noprofile -i
sourced /home/saml/.bashrc
bash --noprofile -l
$ bash --noprofile -l
bash-4.1$
bash --norc -i -ou- bash --norc -l
$ bash --norc -c 'echo hi'
hi
Maneiras mais esotéricas de chamar bash
bash --rcfile $ HOME / .bashrc
$ bash -rcfile ~/.bashrc
sourced /home/saml/.bashrc
bash --norc --rcfile $ HOME / .bashrc
$ bash --norc -rcfile ~/.bashrc
bash-4.1$
Estes falharam
bash -i -rcfile ~ / .bashrc
$ bash -i -rcfile ~/.bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
bash -i -rcfile .bashrc
$ bash -i -rcfile .bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: .bashrc: command not found
Provavelmente há mais, mas você entendeu o ponto, espero ...
O quê mais?
Por fim, se você está tão entusiasmado com este tópico que gostaria de ler / explorar mais sobre ele, sugiro dar uma olhada no Bash Beginners Guide, especificamente na seção: 1.2. Vantagens do Bourne Again SHell . As várias subseções dessa seção, "1.2.2.1. Invocação" a "1.2.2.3.3. Comportamento interativo do shell", explicam as diferenças de baixo nível entre as várias maneiras de invocar bash
.