Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b3eb63251f | ||
|
f4ed6a3921 | ||
|
1222256228 |
69
README.md
Normal file
69
README.md
Normal file
@ -0,0 +1,69 @@
|
||||
# loadenv
|
||||
|
||||
Loads environment files before running a command without polluting your environment
|
||||
|
||||
## Source code
|
||||
|
||||
You can find the source code here: [git.milar.in](https://git.milar.in/milarin/loadenv)
|
||||
|
||||
## Installation
|
||||
|
||||
If you have Go installed, you can simply go install the program: `go install git.milar.in/milarin/loadenv@latest`
|
||||
|
||||
There are pre-compiled executables for various platforms on the [repository](https://git.milar.in/milarin/loadenv/releases).
|
||||
|
||||
## License
|
||||
|
||||
Distributed under the MIT License. See [LICENSE.md](https://git.milar.in/milarin/loadenv/src/branch/main/LICENSE.md)
|
||||
|
||||
## Usage
|
||||
|
||||
`loadenv` loads the environment file provided via `-f` into the environment and runs the command provided after the arguments.
|
||||
If no file is provided, `.env` is used by default.
|
||||
If no command is provided, `loadenv` prints all environment variables to stdout.
|
||||
|
||||
---
|
||||
|
||||
The variables will only be available to the given command. They will be deleted after the command exits.
|
||||
`loadenv` can be useful when working with programs which heavily use environment variables.
|
||||
|
||||
```sh
|
||||
$ cat .env
|
||||
# production server configuration
|
||||
DATABASE_HOST=prod-server.com
|
||||
DATABASE_USER=milarin
|
||||
DATABASE_PASS=my-super-secure-password
|
||||
|
||||
$ # show the 3 last added env variables
|
||||
$ loadenv | tail -n 3
|
||||
DATABASE_HOST=prod-server.com
|
||||
DATABASE_USER=milarin
|
||||
DATABASE_PASS=my-super-secure-password
|
||||
|
||||
$ cat dev.env
|
||||
# development server configuration
|
||||
DATABASE_HOST=dev-server.com
|
||||
DATABASE_USER=milarin
|
||||
DATABASE_PASS=my-super-secure-password
|
||||
|
||||
$ # load dev.env into environment and run the command env. show last 3 lines
|
||||
$ loadenv -f dev.env env | tail -n 3
|
||||
DATABASE_HOST=dev-server.com
|
||||
DATABASE_USER=milarin
|
||||
DATABASE_PASS=my-super-secure-password
|
||||
```
|
||||
|
||||
environment variables in that file will be expanded:
|
||||
|
||||
```sh
|
||||
$ env | grep USER # current value of $USER
|
||||
USER=milarin
|
||||
|
||||
$ cat .env
|
||||
# expand $USER reference
|
||||
USERNAME=$USER
|
||||
|
||||
$ loadenv | tail -n 1
|
||||
USERNAME=milarin
|
||||
```
|
||||
|
2
go.mod
2
go.mod
@ -1,3 +1,5 @@
|
||||
module git.milar.in/milarin/loadenv
|
||||
|
||||
go 1.18
|
||||
|
||||
require git.milar.in/milarin/buildinfo v1.0.0
|
||||
|
2
go.sum
2
go.sum
@ -0,0 +1,2 @@
|
||||
git.milar.in/milarin/buildinfo v1.0.0 h1:tw98GupUYl/0a/3aPGuezhE4wseycOSsbcLp70hy60U=
|
||||
git.milar.in/milarin/buildinfo v1.0.0/go.mod h1:arI9ZoENOgcZcanv25k9y4dKDUhPp0buJrlVerGruas=
|
9
main.go
9
main.go
@ -8,6 +8,8 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
|
||||
"git.milar.in/milarin/buildinfo"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -15,11 +17,18 @@ var (
|
||||
|
||||
EnvVarRegex = regexp.MustCompile(`^(.*?)=(.*?)$`)
|
||||
EnvCommentRegex = regexp.MustCompile(`^[ \t]*#.*?$`)
|
||||
|
||||
ShowVersion = flag.Bool("v", false, "show version and exit")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if *ShowVersion {
|
||||
buildinfo.Print(buildinfo.Options{})
|
||||
return
|
||||
}
|
||||
|
||||
envFile, err := os.Open(*EnvFilePath)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "could not open file '%s': %s\n", *EnvFilePath, err.(*os.PathError).Err)
|
||||
|
Loading…
Reference in New Issue
Block a user