35 lines
536 B
Go
35 lines
536 B
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
func RunCmd(cmd []string, env Environment) (returnCode int) {
|
|
c := exec.Command(cmd[0], cmd[1:]...)
|
|
for k, v := range env {
|
|
_, ok := os.LookupEnv(k)
|
|
if ok {
|
|
if err := os.Unsetenv(k); err != nil {
|
|
return -1
|
|
}
|
|
}
|
|
if v != "" {
|
|
if err := os.Setenv(k, v); err != nil {
|
|
return -1
|
|
}
|
|
}
|
|
}
|
|
c.Stdout = os.Stdout
|
|
c.Stderr = os.Stderr
|
|
if err := c.Run(); err != nil {
|
|
if code, ok := err.(*exec.ExitError); ok {
|
|
return code.ExitCode()
|
|
}
|
|
|
|
return -1
|
|
}
|
|
|
|
return 0
|
|
}
|