Na parte superior de .bashrc
put:
unset BASH_ENV
Se .bashrc
já estiver sendo originado para configurar o ambiente, não haverá necessidade de chamadas futuras para bash
para configurar o ambiente novamente.
Dentro de ~/.bashrc
, executo um script bash (um script com #!/usr/bin/env bash
no topo). Descobri que quando BASH_ENV
está definido como ~/.bashrc
, isso configura um loop infinito quando um comando bash é executado. Qual é a melhor maneira de evitar isso?
Aqui está o meu entendimento do que acontece (consulte também o manual do bash na inicialização arquivos ):
bash
executado não interativamente resolve BASH_ENV
para ~/.bashrc
. bash
começa a pesquisar ~/.bashrc
. bash
chega à linha em ~/.bashrc
que chama o script bash e inicia um subprocesso bash
. bash
resolve BASH_ENV
to ~/.bashrc
e, portanto, volta para a etapa 1 aqui, configurando um loop infinito. Me deparei com esse problema porque queria executar algumas tarefas cron usando meu ambiente padrão e encontrei sugestões para definir BASH_ENV
dentro do crontab. Estou postando isso como uma pergunta aqui porque não consegui encontrar o problema discutido em minhas pesquisas on-line e parece que algo poderia prejudicar outras pessoas. Estou postando minha própria solução abaixo, mas pode haver outras melhores.
Na parte superior de .bashrc
put:
unset BASH_ENV
Se .bashrc
já estiver sendo originado para configurar o ambiente, não haverá necessidade de chamadas futuras para bash
para configurar o ambiente novamente.