O problema mais comum causado pelo uso incorreto de arquivos de inicialização do shell é que, se você definir variáveis de ambiente em .bashrc
em oposição a .profile
, elas não serão definidas em aplicativos que não são iniciados a partir de um shell em um terminal, mas de um menu GUI.
Definir variáveis de ambiente de .bashrc
geralmente não é uma boa ideia, mas isso é principalmente porque geralmente é inútil, já que as variáveis já devem ter sido definidas no momento do login. Isso pode causar um problema na prática se você (ou um aplicativo) alterar deliberadamente o valor de uma variável (por exemplo, PATH
) em um programa e iniciar um shell a partir desse programa e esperar que a configuração permaneça a mesma. / p>
Você pode evitar o problema de redefinir as variáveis de ambiente definindo um valor de "sentinela" e não definir nada se o valor da sentinela estiver definido:
if [ -z "$JMLANE_PROFILE_READ" ]; then
export ...
export JMLANE_PROFILE_READ=1
fi
Outro problema causado por terminais que iniciam shells de login é que há coisas que só devem ser feitas uma vez quando você efetua login, por exemplo, iniciando um agente de senha (por exemplo, ssh-agent
) ou iniciando uma sessão (por exemplo, executando startx
em certas circunstâncias). A variável sentinela evita esses problemas.
Um shell dentro de um terminal é sempre interativo. Contanto que você escolha .bashrc
de .bash_profile
quando o shell for interativo, você não precisa se preocupar com o terminal que inicia um shell de login.
Uma verruga adicional da manipulação de arquivos de inicialização do bash é que .bashrc
é lido por shells não interativos invocados por rshd ou sshd. Por exemplo, quando você executar rsync somefile host.example.com:
, se o seu shell de login em host.example.com
for bash, você poderá usar .bashrc
lá para definir o caminho para incluir rsync
. Você pode dizer que está nesta situação porque .bashrc
é lido de um shell não interativo.
## .bashrc
if [[ $- != *i* ]]; then
# either .bashrc was executed explicitly or this is a noninteractive rsh/ssh session
fi