Envsubst | Linux
- Envsubst | Linux
Visão geral
envsubst é uma ferramenta de linha de comando, parte do pacote GNU gettext, utilizada para substituir variáveis de ambiente em textos. Ela é amplamente usada em scripts de shell, pipelines CI/CD e configurações de containers para gerar arquivos a partir de templates.
Em termos simples, o envsubst lê um texto de entrada e substitui variáveis como $VAR ou ${VAR} pelos valores definidos no ambiente.
Instalação
Linux (Debian/Ubuntu)
sudo apt install gettext
Linux (Alpine)
apk add gettext
macOS (Homebrew)
brew install gettext
brew link --force gettext
Sintaxe básica
envsubst [OPÇÃO] < arquivo_entrada > arquivo_saida
Ou usando pipe:
cat arquivo_entrada | envsubst > arquivo_saida
Exemplo simples
Template (config.template)
API_URL=${API_URL}
PORT=$PORT
Definindo variáveis de ambiente
export API_URL=https://api.exemplo.com
export PORT=8080
Executando envsubst
envsubst < config.template > config.conf
Resultado (config.conf)
API_URL=https://api.exemplo.com
PORT=8080
Substituir apenas variáveis específicas
Por padrão, o envsubst substitui todas as variáveis encontradas. Para limitar quais variáveis serão substituídas:
envsubst '$API_URL $PORT' < config.template > config.conf
Isso é útil para evitar substituições acidentais.
Uso comum com Docker
Exemplo em entrypoint
#!/bin/sh
envsubst < /app/nginx.conf.template > /etc/nginx/nginx.conf
exec nginx -g "daemon off;"
Boas práticas
-
Sempre valide se as variáveis necessárias estão definidas:
: "${API_URL:?Variável API_URL não definida}" -
Use templates com extensão
.templatepara clareza. -
Combine com
set -eem scripts para evitar erros silenciosos. -
Prefira
${VAR}em vez de$VARpara evitar ambiguidades.
Limitações
- Não suporta lógica condicional.
- Não executa expressões ou funções.
- Apenas substitui valores literais de variáveis de ambiente.
Para lógica mais complexa, considere ferramentas como jinja2, helm ou gomplate.
Quando usar envsubst
- Geração de arquivos de configuração simples
- Ambientes Docker e Kubernetes
- Pipelines CI/CD
- Scripts de shell leves
Referência rápida
envsubst # substitui todas as variáveis
envsubst '$VAR' # substitui apenas VAR