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
wodow
fonte
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.

Marco
fonte
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.

wodow
fonte
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.

Shouvik
fonte
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.

wodow
fonte
1) Não caté necessário, basta escrever tr "\\n" " " < .env2) Isso interrompe se forem utilizadas atribuições de várias linhas.
Marco