1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
// Copyright (c) 2019-2022, Sylabs Inc. All rights reserved.
// This software is licensed under a 3-clause BSD license. Please consult the
// LICENSE.md file distributed with the sources of this project regarding your
// rights to use or distribute this software.
// expand-env is a simple program that reads stdin, replaces all
// occurrences of @VAR@ by the corresponding value of VAR in the current
// environment, and writes the result to stdout.
package main
import (
"fmt"
"io"
"os"
"strings"
)
func main() {
stdin, err := io.ReadAll(os.Stdin)
if err != nil {
fmt.Fprintf(os.Stderr, "E: Cannot read stdin. Abort.\n")
os.Exit(1)
}
env := os.Environ()
replacements := make([]string, 0, 2*len(env))
for _, e := range os.Environ() {
values := strings.SplitN(e, "=", 2)
// This should never happen, but just in case
if len(values) == 1 {
values = append(values, "")
}
replacements = append(replacements, "@"+values[0]+"@", values[1])
}
strings.NewReplacer(replacements...).WriteString(os.Stdout, string(stdin))
}
|