Respostas:
Na verdade, é bash
especificamente o que lê .bashrc
(e /etc/bash.bashrc
). Existem muitas conchas diferentes.
A página de manual do bash (de Brian Fox e Chet Ramey; também a página de informações "Bash Startup Files" ) é a referência autorizada:
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
opção file forçará o bash a ler e executar comandos do arquivo em vez de~/.bashrc
.Quando o bash é iniciado de maneira não interativa, para executar um script de shell, por exemplo, ele procura a variável
BASH_ENV
no ambiente, expande seu valor se aparecer lá e usa o valor expandido como o nome de um arquivo para ler e executar. O Bash se comporta como se o seguinte comando tivesse sido executado:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
mas o valor da
PATH
variável não é usado para procurar o nome do arquivo.
O arquivo é apenas comandos de shell. É normalmente usado para alterar prompts, definir variáveis de ambiente e definir procedimentos de shell. Tradicionalmente, o arquivo .profile
é usado para esse fim, mas bash
tem tantas extensões que precisa de seu próprio arquivo de inicialização para usuários que desejam colocar bashisms nos arquivos de inicialização.
" Não é um shell de login " significa coisas como o lançamento de scripts e, geralmente, janelas de terminal iniciadas pelos gerenciadores de janelas. Às vezes eu configuro sistemas * nix para ter .bashrc
e BASH_ENV
apenas fonte .profile
. Contanto que você não se desvie para fora dos comandos do shell POSIX, obterá a mesma inicialização em qualquer shell.
É particularmente valioso quando sh
é realmente bash
, o que às vezes acontece. Para fazer isso, use:
. .profile
Uma razão pela qual tudo é tão complexo é porque, às vezes, as pessoas colocam coisas que produzem saída nos arquivos de inicialização do shell ou definem avisos incondicionalmente. Isso causa muitos problemas ao executar programas de shell e comandos de backtick em idiomas, sem mencionar os system(3)
programas em C. A maneira como a bash
inicialização foi projetada, eu acho, para ter um arquivo em que a saída e a configuração do prompt estão OK e um arquivo em que não está. Tradicionalmente, um teste em tempo de execução seria feito para distinguir a interatividade, por exemplo, verificando se o prompt está definido.
Quando o Bash é iniciado, ele executa os comandos em uma variedade de scripts diferentes.
Quando o Bash é chamado como um shell de login interativo, 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 comandos do primeiro que existe e é legível.
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 opção --norc. A opção --rcfile file forçará o Bash a ler e executar comandos do arquivo em vez de ~ / .bashrc.
http://en.wikipedia.org/wiki/Bash_(Unix_shell)
Aqui estão alguns truques e dicas:
http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
Vamos tentar definir o prompt para que ele possa exibir a data e o nome do host de hoje:
PS1="\d \h $ "
.profile
depois .bash_profile
? Alguma lógica?
Ele deve conter vários comandos de "inicialização" para o seu shell, por exemplo:
alias ll='ls -l'
).ll='ls -l'
permite digitar ll
para executar o ls -l
comando.