blob: b15a94e2f8728f77a0a13b6d611d61c4ad687ce3 [file] [edit]
// Package osutils provide tools that interact with the OS or the shell.
package osutils
import (
"bufio"
"bytes"
"github.com/golang/glog"
"io"
"os"
"os/exec"
"strings"
)
// Run returns the stdout and stderr the output of running the given command
// with the given arguments.
func Run(command string, args []string, hideStderr bool) (string, error) {
cmd := exec.Command(command, args...)
glog.Infof("running command `%s`", cmd)
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
if !hideStderr {
// Displays stderr as it comes to the os.stderr
// Useful when running install as the executing logs
// are displayed on the os.stderr as it runs
cmd.Stderr = io.MultiWriter(os.Stderr, &stderr)
}
err := cmd.Run()
// Discarding errors if hideStderr is true, similar to setting '2>/dev/null'.
if hideStderr {
return stdout.String(), nil
}
return stdout.String(), err
}
// Parse returns a mapping of contents of the osFile.
//
// Syntax of contents in the os realease file : <key>=<value>
// Returns a mapping of the key to value
func Parse(osFile string) (map[string]string, error) {
f, err := os.Open(osFile)
if err != nil {
return nil, err
}
defer f.Close()
osReleaseFile := make(map[string]string)
scanner := bufio.NewScanner(f)
for scanner.Scan() {
line := scanner.Text()
key, value, found := strings.Cut(line, "=")
if found {
osReleaseFile[key] = value
}
}
return osReleaseFile, nil
}