Na verdade, é bash
especificamente que lê .bashrc
(e /etc/bash.bashrc
). Existem muitas conchas diferentes.
A página do bash man (de Brian Fox e Chet Ramey; também info página "Bash Startup Files" ) é a referência autoritativa:
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
.When bash is started non-interactively, to run a shell script, for example, it looks for the variable
BASH_ENV
in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the
PATH
variable is not used to search for the file name.
O arquivo é apenas comandos shell. É normalmente usado para alterar prompts, definir variáveis de ambiente e definir procedimentos de shell. Tradicionalmente, o arquivo .profile
é usado para essa finalidade, mas bash
tem tantas extensões que precisa de seu próprio arquivo de inicialização para usuários que desejam colocar bashisms em arquivos de inicialização.
" Não é um shell de login " significa coisas como o lançamento de scripts e geralmente janelas de terminal iniciadas por gerenciadores de janelas. Às vezes eu configuro sistemas * nix para ter .bashrc
e BASH_ENV
apenas a fonte .profile
. Contanto que você não se desvie dos comandos shell do POSIX, você terá a mesma inicialização em qualquer shell.
É particularmente valioso quando sh
é realmente bash
, o que às vezes acontece. Para fazer isso, use:
. .profile
Uma das razões pelas quais isso é tão complexo é porque às vezes as pessoas colocam coisas que produzem saída em arquivos de inicialização do shell ou definem prompts incondicionalmente. Isso causa muitos problemas ao executar programas shell e comandos backtick em idiomas, sem mencionar system(3)
de programas em C. A maneira como o bash
é iniciado é projetado, penso eu, para ter um arquivo em que a saída e a configuração do prompt estejam OK e um arquivo não esteja. Tradicionalmente, um teste em tempo de execução seria feito para distinguir a interatividade, por exemplo, verificando se o prompt está definido.