Armazenando todas as variáveis de ambiente em um arquivo

1

Quais são as ressalvas de ter um único arquivo com variáveis de ambiente?

O que eu gostaria de fazer é criar um arquivo (por exemplo, ~/.env ) que contenha todas as declarações PATH necessárias e possivelmente outras variáveis de ambiente não confidenciais, como EDITOR e GOPATH , e arquivo originado de dentro de cada um dos arquivos pontuais específicos do shell.

Especificamente, eu gostaria de incluir a linha

    . "$HOME/.env"

para todos os .profile , .bash_profile , .bashrc , .zprofile , .zshenv , .zshrc

O objetivo é ter um comportamento consistente de comandos executados em shells interativos / não interativos e de login / não-login.

Por que eu não quero fazer isso? Há algum problema que possa ocorrer por causa disso?

Eu li um monte de respostas sobre SE relacionadas ao tópico, como

link
link
link
link

e eu entendo quais são algumas práticas sugeridas de declarações de env. No entanto, gostaria de saber se o método acima também é aceitável e seguro.

    
por mikeonly 18.07.2018 / 00:21

2 respostas

0

O único problema com isso é que, se você originar o arquivo de .bash_profile e .bashrc , e se esses dois arquivos forem fonte um do outro (e semelhantemente para outros shells), você poderá originar vários arquivos de ambiente ( duas) vezes ao iniciar uma sessão de shell.

Isso não é um problema, a menos que você adicione / valores às variáveis de ambiente.

Você pode se proteger contra isso configurando uma variável de shell como env_sourced para algum valor no arquivo e, em seguida, testando-a no topo:

# My environment file

[ -n "$env_sourced" ] && return
env_sourced=1

PATH="$PATH:/some/path"
# etc.
    
por 18.07.2018 / 09:09
0

Não vejo por que você não deveria fazer isso. Por exemplo, estou trabalhando em um ambiente misto bash / zsh (ou seja, eu uso em algumas janelas do terminal bash e em alguns zsh). Eu coloquei essas definições - variáveis de ambiente, variáveis não exportadas, funções de shell -, que são sintaticamente compatíveis para ambos os idiomas, em um arquivo comum, que eu estou obtendo de .bashrc e de .zshrc.

    
por 18.07.2018 / 07:48