envsubst

package module
v1.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2023 License: MIT Imports: 3 Imported by: 50

README

envsubst

GoDoc License Build status Github All Releases

Environment variables substitution for Go. see docs below

Installation:
From binaries

Latest stable envsubst prebuilt binaries for 64-bit Linux, or Mac OS X are available via Github releases.

Linux and MacOS
curl -L https://github.com/a8m/envsubst/releases/download/v1.2.0/envsubst-`uname -s`-`uname -m` -o envsubst
chmod +x envsubst
sudo mv envsubst /usr/local/bin
Windows

Download the latest prebuilt binary from releases page, or if you have curl installed:

curl -L https://github.com/a8m/envsubst/releases/download/v1.2.0/envsubst.exe
With go

You can install via go get (provided you have installed go):

go get github.com/a8m/envsubst/cmd/envsubst
Using via cli
envsubst < input.tmpl > output.text
echo 'welcome $HOME ${USER:=a8m}' | envsubst
envsubst -help
Imposing restrictions

There are three command line flags with which you can cause the substitution to stop with an error code, should the restriction associated with the flag not be met. This can be handy if you want to avoid creating e.g. configuration files with unset or empty parameters. Setting a -fail-fast flag in conjunction with either no-unset or no-empty or both will result in a faster feedback loop, this can be especially useful when running through a large file or byte array input, otherwise a list of errors is returned.

The flags and their restrictions are:

Option Meaning Type Default
-i input file ```string stdin```
-o output file ```string stdout```
-no-digit do not replace variables starting with a digit, e.g. $1 and ${1} flag false
-no-unset fail if a variable is not set flag false
-no-empty fail if a variable is set but empty flag false
-fail-fast fails at first occurence of an error, if -no-empty or -no-unset flags were not specified this is ignored flag false

These flags can be combined to form tighter restrictions.

Using envsubst programmatically ?

You can take a look on _example/main or see the example below.

package main

import (
	"fmt"
	"github.com/a8m/envsubst"
)

func main() {
    input := "welcom $HOME"
    str, err := envsubst.String(input)
    // ...
    buf, err := envsubst.Bytes([]byte(input))
    // ...
    buf, err := envsubst.ReadFile("filename")
}
Docs

api docs here: GoDoc

Expression Meaning
${var} Value of var (same as $var)
${var-$DEFAULT} If var not set, evaluate expression as $DEFAULT
${var:-$DEFAULT} If var not set or is empty, evaluate expression as $DEFAULT
${var=$DEFAULT} If var not set, evaluate expression as $DEFAULT
${var:=$DEFAULT} If var not set or is empty, evaluate expression as $DEFAULT
${var+$OTHER} If var set, evaluate expression as $OTHER, otherwise as empty string
${var:+$OTHER} If var set, evaluate expression as $OTHER, otherwise as empty string
$$var Escape expressions. Result will be $var.

Most of the rows in this table were taken from here

See also
  • os.ExpandEnv(s string) string - only supports $var and ${var} notations
License

MIT

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Bytes

func Bytes(b []byte) ([]byte, error)

Bytes returns the bytes represented by the parsed template after processing it. If the parser encounters invalid input, it returns an error describing the failure.

func BytesRestricted

func BytesRestricted(b []byte, noUnset, noEmpty bool) ([]byte, error)

BytesRestricted returns the bytes represented by the parsed template after processing it. If the parser encounters invalid input, or a restriction is violated, it returns an error describing the failure.

func BytesRestrictedNoDigit added in v1.4.0

func BytesRestrictedNoDigit(b []byte, noUnset, noEmpty bool, noDigit bool) ([]byte, error)

Like BytesRestricted but additionally allows to ignore env variables which start with a digit.

func ReadFile

func ReadFile(filename string) ([]byte, error)

ReadFile call io.ReadFile with the given file name. If the call to io.ReadFile failed it returns the error; otherwise it will call envsubst.Bytes with the returned content.

func ReadFileRestricted

func ReadFileRestricted(filename string, noUnset, noEmpty bool) ([]byte, error)

ReadFileRestricted calls io.ReadFile with the given file name. If the call to io.ReadFile failed it returns the error; otherwise it will call envsubst.Bytes with the returned content.

func ReadFileRestrictedNoDigit added in v1.4.0

func ReadFileRestrictedNoDigit(filename string, noUnset, noEmpty bool, noDigit bool) ([]byte, error)

Like ReadFileRestricted but additionally allows to ignore env variables which start with a digit.

func String

func String(s string) (string, error)

String returns the parsed template string after processing it. If the parser encounters invalid input, it returns an error describing the failure.

func StringRestricted

func StringRestricted(s string, noUnset, noEmpty bool) (string, error)

StringRestricted returns the parsed template string after processing it. If the parser encounters invalid input, or a restriction is violated, it returns an error describing the failure. Errors on first failure or returns a collection of failures if failOnFirst is false

func StringRestrictedNoDigit added in v1.4.0

func StringRestrictedNoDigit(s string, noUnset, noEmpty bool, noDigit bool) (string, error)

Like StringRestricted but additionally allows to ignore env variables which start with a digit.

Types

This section is empty.

Directories

Path Synopsis
cmd
envsubst
envsubst command line tool
envsubst command line tool
Most of the code in this package taken from golang/text/template/parse
Most of the code in this package taken from golang/text/template/parse

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL