Se você está usando o gnu make, o que deve funcionar é incluir o arquivo envfile
, então
exportar a lista de vars obtida do mesmo arquivo:
#!make
include envfile
export $(shell sed 's/=.*//' envfile)
test:
env
Estou tentando incluir algumas env vars em um Makefile. O arquivo env se parece com:
FOO=bar
BAZ=quux
Note que não há nenhum líder export
para cada env var. Se eu adicionar o export
e apenas include
do arquivo env no Makefile, tudo funcionará como deveria. Mas eu preciso manter o comando env vars sans levando export
. Isso me impede de usar apenas include envfile
no Makefile.
Eu também tentei fazer algo assim:
sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env
Mas isso causa um erro porque o arquivo env não está incluído.
Eu tive um problema semelhante e cheguei nesse tópico. Outra solução possível é apenas fazer o comando make export sem nenhum argumento:
include .env
export
Isso exportará todas as variáveis do make como variáveis de ambiente. Esse comportamento pode ou não corresponder a todos os casos de uso, mas funcionou para mim e não envolveu nenhuma magia de script de shell.
Preserva vars ENV pré existentes
export $(shell [ ! -n "$(ENVFILE)" ] || cat $(ENVFILE) | grep -v \
--perl-regexp '^('$$(env | sed 's/=.*//'g | tr '\n' '|')')\=')
test:
echo $$FOO
Para executar
make ENVFILE=envfile test # bar
export FOO=foo
make ENVFILE=envfile test # foo
Aqui está uma solução elegante que não importa Make vars, mas define quaisquer exportações de ambiente para subprocessos de shell. Pessoalmente, prefiro manter meus perfis dinâmicos em scripts.
export BASH_ENV=tools/sh/env.sh
Existem algumas dicas. Infelizmente ENV não funciona, acho que deveria (mas isso é um problema com o Bash, não com o Make). Também requer outra linha, porque o interpretador de shell padrão do Make é / bin / sh.
BASH_ENV := tools/sh/env.sh
SHELL := /usr/bin/bash
No lado de cima, isso também permite incluir funções do shell em scripts do Makefile, mas apenas para os scripts de receita. Eu não sei como outras conchas além de Bash são. E há um pouco mais acontecendo. Eu coloquei um testfile como GIST .
Existem muitos scripts de shell complicados imagináveis. Eu gosto deste Q / A melhor para as respostas simples.
se o seu nome de arquivo for .makerc
, então você pode incluí-lo no Makefile tão simples assim:
include .makerc
Eu prefiro adicionar o sinal -
antes de include
, para suprimir quaisquer avisos.