.bashrc
e .bash_profile
são scripts NÃO . Eles são arquivos de configuração que são originados sempre que bash
é executado de duas maneiras:
- interativo
- faça login
A seção INVOCATION da página man bash é relevante.
A login shell is one whose first character of argument zero is a
-
, or one started with the--login
option.An interactive shell is one started without non-option arguments and without the
-c
option whose standard input and error are both connected to terminals (as determined byisatty(3))
, or one started with the-i
option. PS1 is set and$-
includesi
ifbash
is interactive, allowing a shell script or a startup file to test this state.The following paragraphs describe how
bash
executes its startup files. If any of the files exist but cannot be read, bash reports an error. Tildes are expanded in file names as described below under Tilde Expansion in the EXPANSION section.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
.
Você pode controlar quando eles são carregados através das opções de linha de comando, --norc
e --noprofile
. Você também pode substituir o local de onde eles foram carregados usando a opção --rcfile
.
Como os outros mencionaram, você pode imitar como esses arquivos são carregados por meio do uso do comando source <file>
ou do uso do comando . <file>
.
É melhor pensar nessa funcionalidade da seguinte forma:
- o bash é iniciado com um ambiente vazio
- o bash abre um desses arquivos (dependendo de como foi chamado como interativo ou login e, em seguida, ...
- ... linha por linha executa cada um dos comandos dentro do arquivo ...
- quando completo dá o controle na forma de um prompt, aguardando entrada
Métodos para invocar
Este tópico parece surgir de vez em quando, portanto, aqui está uma pequena planilha com as várias maneiras de invocar bash
e o que elas resultam. OBSERVAÇÃO: Para ajudar, adicionei as mensagens "originaram $ HOME / .bashrc" e "originaram $ HOME / .bash_profile" em seus 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
OBSERVAÇÃO: Observe que a opção
-c
não originou nenhum arquivo!
desabilitando os 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
Formas 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
Há provavelmente mais, mas você entendeu, espero ...
O que mais?
Por fim, se você está tão encantado com esse tópico que gostaria de ler / explorar mais, sugiro dar uma olhada no Guia Bash para Iniciantes, especificamente na seção: 1.2. Vantagens do Bourne Again SHell . As várias subseções sob aquela, "1.2.2.1. Invocação" através de "1.2.2.3.3. Comportamento de shell interativo" explicam as diferenças de baixo nível entre as várias maneiras que você pode invocar bash
.