Para fazer o bash analisar um arquivo quando invocado como um shell não interativo, você precisa definir a variável de ambiente BASH_ENV
para apontar para esse arquivo. De man bash
(seção na INVOCATION):
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 com‐ mand 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.
Então, onde definir BASH_ENV
?
Ou:
Se você quiser que uma variável esteja disponível para o ambiente em todo o sistema, um bom local para colocá-la é /etc/environment
. Este arquivo é feito especificamente para configurações de variáveis de ambiente em todo o sistema. Ele não é analisado pelo shell, mas pelo módulo PAM pam_env
, portanto, você não pode usar a sintaxe do shell ou a expansão de variáveis, mas apenas designações simples do tipo a seguir:
VARIABLE=value
ou
VARIABLE=/full/path/to/file
As alterações entrarão em vigor no próximo login / autenticação, então mude para um novo console ou logout tty e faça o login novamente na sua sessão.
Em um sistema de desktop padrão, isso deve funcionar para todos os tipos de sessões autenticadas usando o PAM, incluindo logins de console, ssh e gerenciadores de exibição, mas também daemons como atd e cron. Se tudo funcionar como esperado, então você está pronto e não há necessidade de ler.
No entanto, erros ocasionalmente surgem nos arquivos de configuração do PAM de alguns programas / distribuições, portanto, se /etc/environment
não for analisado por um certo tipo de programa, certifique-se de que o módulo PAM necessário esteja carregado no arquivo de configuração PAM. esse programa em /etc/pam.d
:
session required pam_env.so readenv=1
(Nota: O readenv
flag que liga / desliga a configuração do arquivo de configuração não deve ser realmente necessário, já que é definido como on (1) por padrão - mas não faz mal ter certeza disso. )
Ou:
Se você estiver trabalhando em um sistema que não forneça pam_env
, a melhor alternativa que venha à minha mente seria escrever um script de inicialização simples (ou arquivo de unidade de serviço no systemd) que analise um arquivo de configuração personalizado (como /etc/default/environment
) na inicialização.