Existe um utilitário para ler variáveis ​​de ambiente de um arquivo env e depois executar um comando (mais leve que o foreman)?


16

foreman pode ler arquivos .env e definir variáveis ​​de ambiente a partir do conteúdo e, em seguida, executar um programa

por exemplo foreman run -e vars.env myprogram

... mas ele faz muitas outras coisas (e se preocupa principalmente em iniciar as coisas usando o formato Procfile).

Existe uma ferramenta mais simples (Linux / Unix) focada apenas na leitura de arquivos .env e na execução de um comando com o novo ambiente?

Arquivo de ambiente de exemplo (de http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux

11
Você pode postar um arquivo .env de exemplo? Eu suspeito bash .envou sh .envposso funcionar?
precisa saber é o seguinte

@ IVlint67 Melhorei um pouco a questão.
Wodow 20/09/2013

Respostas:


19

Você pode originar o arquivo de ambiente no shell ativo e executar o programa:

sh -ac ' . ./.env; /usr/local/bin/someprogram'

O -aswitch exporta todas as variáveis, para que elas estejam disponíveis para o programa.


3
bash -ac 'source .env && ./program'
fiatjaf 2/01/19

@ fiatjaf Por que você usaria o bash nesse caso se o shell POSIX faz o trabalho e você não precisa de nenhum recurso que realmente exija o bash? Além disso, o bash não está disponível por padrão em todos os sistemas (por exemplo, FreeBSD).
Marco

Ah, certo, faz sentido, acho que seu caminho é melhor, então. Eu estava apenas fornecendo a alternativa Bash porque me senti mais confortável em escrevê-la.
fiatjaf 3/01/19

2

Outra alternativa é envdir:

O envdir executa outro programa com o ambiente modificado de acordo com os arquivos em um diretório especificado.


Este post menciona algumas características complementares entre envdir, runite chpst; ou seja, a capacidade de alterar ambientes refletem no estado do processo que está sendo executado. A postagem é sobre docker, mas não se limita ao docker. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
driftcatcher

2

Eu tentei source .enve funcionou como um encanto. Infelizmente, nenhuma das outras soluções postadas aqui funcionou para mim.


0

Isso funciona:

env $(cat .env | tr "\\n" " ") myprogram

mas obviamente não verifica se o formato do .envarquivo está correto, o que um programa utilitário faria.


1) Não caté necessário, basta escrever tr "\\n" " " < .env2) Isso interrompe se forem utilizadas atribuições de várias linhas.
Marco
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.