This is a straight port of the envdir
C source code from the daemontools
repository (which has also been made available inside of the "testdata"
directory): https://cr.yp.to/daemontools/envdir.html
There is one external dependency (on golang.org/x/sys/unix) and there are no additional features, versus the original tool.
envdir dir childprog [arg1 arg2 arg3]
dir is a single argument. childprog is the child program, which can have as many arguments as you like.
envdir sets various environment variables as specified by files in the directory named dir. It then runs childprog.
If dir contains a file named s whose contents are t, envdir removes an environment variable named s if one exists, and then adds an environment variable named s with value t. The name s must not contain =. Spaces and tabs at the end of t are removed. Nulls in t are changed to newlines in the environment variable.
If the file s is completely empty (0 bytes long), envdir removes an environment variable named s if one exists, without adding a new variable.
envdir exits 111 if it has trouble reading dir, if it runs out of memory for environment variables, or if it cannot run childprog. Otherwise its exit code is the same as that of childprog.
Install from source:
go install github.com/kevinburke/[email protected]
Or, on Macs you can install via Homebrew:
brew install kevinburke/safe/envdir
-
Python
envdir
ports: You need a Python runtime to run this in production. -
mattrobenolt/envdir-plusplus
: Reads a single file with env vars instead of a directory. -
d10n/envdir
: Usesdocopt
for argument parsing and does not use theexec
syscall to replace itself in the process hierarchy. -
yfuruyama/envdir
: Does not replace itself in the process hierarchy with theexec
syscall. -
amannocci/genvdir
: Dependency oncobra
for argument parsing, does not handle null characters, does not handle trailing whitespace correctly. -
ios116/go-envdir
: Does not delete environment variables if given an empty file.
-
The original envdir would only allow 256 bytes in an environment variable, this program allows 1024 bytes.
-
The original envdir program would only read the first line of an environment variable, where we allow newlines.
-
The original envdir program would only trim tabs and newlines from the end of an environment variable, we trim all runes that unicode.IsSpace reports true on.