Do manual bash
:
When an interactive shell that is not a login shell is started,
bash
reads and executes commands from~/.bashrc
, if that file exists.
Portanto, se seu shell for um shell de login, ~/.bashrc
não será lido.
Eu colocaria adições em PATH
em ~/.bash_profile
, e / ou possivelmente fornecerei ~/.bashrc
daí.
Algumas camadas fazem uma distinção entre dois ou três tipos de arquivos de inicialização:
- Um arquivo profile que é lido por shells de login.
- Um arquivo que é lido por shells interativos.
- E possivelmente, um arquivo que é lido por shells não interativos, ou seja, scripts.
Para bash
:
-
~/.bash_profile
-
~/.bashrc
- Qualquer arquivo
$BASH_ENV
aponta para.
O ponto de separar o script de inicialização perfil do script lido por shells interativos é permitir que você faça (potencialmente pesadas) tarefas de configuração para todas as futuras sessões de shell de uma vez por todas. Isso geralmente envolve definir PATH
no mínimo, mas também qualquer outra variável exportada (por exemplo, variáveis de ambiente).
O script de inicialização do shell interativo ( ~/.bashrc
no caso de bash
) precisa apenas fazer algo especificamente necessário para shells interativos. Isso inclui a configuração de variáveis de shell como PS1
que não devem ser exportadas e a definição de aliases e funções, etc. Você também deve configurar variáveis de ambiente que precisam ser definidas para esta sessão e qualquer processo iniciado desta sessão, como GPG_TTY
( GPG_TTY="$(tty)"
) se você estiver usando o GnuPG.
Eu tenho a tendência de source $HOME/.bashrc
do meu ~/.bash_profile
após definir meu PATH
e ajustar meu umask
da maneira que eu quiser, e deixar ~/.bashrc
configurar as variáveis do arquivo de histórico,%% prompt%, PS1
e PAGER
e alguns aliases e funções e outros. (Isso é meio mentira; eu na verdade EDITOR
o exec
shell do meu perfil se eu puder encontrá-lo, mas se não puder, continuo com ksh93
). Eu também renego meu shell no arquivo de inicialização do shell interativo (com bash
), porque eu geralmente trabalho em uma máquina compartilhada com muitas outras pessoas que precisam da CPU mais do que eu (mas isso é eu).
O shell renice -n 4 $$
usa
-
ksh93
-
~/.profile
(ou qualquer que seja o~.kshrc
aponta para)
$ENV
é um pouco melhor do que ksh93
, pois sabe que existe um shell de login interativo, então lê bash
(se estiver definido) para essas sessões de shell também, depois de ler $ENV
.
O shell ~/.profile
também lê pdksh
para shells não interativos, o que me irrita (e quebra alguns scripts importantes que eu uso), então eu tenho
case $- in
*i*) ;;
*) return ;;
esac
na parte superior do meu arquivo ~/.kshrc
.