A cross-platform tool to load a .env and run a command. https://webinstall.dev/dotenv
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.3 KiB

package main
import (
"flag"
"fmt"
"os"
"strings"
"github.com/joho/godotenv"
)
var (
name = "dotenv"
version = "0.0.0"
date = "0001-01-01T00:00:00Z"
commit = "0000000"
)
func ver() string {
return fmt.Sprintf("%s v%s (%s) %s", name, version, commit[:7], date)
}
func usage() {
fmt.Fprintf(os.Stderr, "%s\n", ver())
fmt.Fprintf(os.Stderr, `
Usage:
%s [-f .env.alternate] -- <command> [arguments...]
`, name)
flag.PrintDefaults()
fmt.Fprintf(os.Stderr, `
Example:
%s -f .env -- caddy run --config Caddyfile
`, name)
//See '%s --help' for details."
}
func main() {
if len(os.Args) > 1 {
if "version" == strings.TrimLeft(os.Args[1], "-") || "-V" == os.Args[1] {
fmt.Println(ver())
os.Exit(0)
return
}
}
_ = flag.Bool("version", false, "print version and exit")
help := flag.Bool("help", false, "print usage and exit")
envList := flag.String("f", ".env", "path to .env file")
flag.Parse()
if *help {
usage()
os.Exit(0)
return
}
envs := strings.Fields(
strings.ReplaceAll(*envList, ",", " "),
)
args := flag.Args()
if len(args) < 1 {
usage()
os.Exit(1)
return
}
cmd := args[0]
cmdArgs := args[1:]
if err := godotenv.Exec(envs, cmd, cmdArgs); nil != err {
fmt.Fprintf(os.Stderr, "error executing %q: %v\n", strings.Join(args, " "), err)
os.Exit(1)
return
}
}