2023-09-22 19:52:45 +08:00
|
|
|
//go:build windows
|
|
|
|
|
|
|
|
|
|
package exec
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"fmt"
|
|
|
|
|
"os"
|
2024-10-02 02:49:53 +08:00
|
|
|
"os/exec"
|
2023-09-22 19:52:45 +08:00
|
|
|
"syscall"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/kballard/go-shellquote"
|
2024-10-02 02:49:53 +08:00
|
|
|
|
|
|
|
|
"github.com/influxdata/telegraf/internal"
|
2023-09-22 19:52:45 +08:00
|
|
|
)
|
|
|
|
|
|
2024-10-24 17:03:42 +08:00
|
|
|
func (c commandRunner) run(
|
2023-09-22 19:52:45 +08:00
|
|
|
command string,
|
|
|
|
|
environments []string,
|
|
|
|
|
timeout time.Duration,
|
2025-02-18 23:23:28 +08:00
|
|
|
) (out, errout []byte, err error) {
|
2023-09-22 19:52:45 +08:00
|
|
|
splitCmd, err := shellquote.Split(command)
|
|
|
|
|
if err != nil || len(splitCmd) == 0 {
|
|
|
|
|
return nil, nil, fmt.Errorf("exec: unable to parse command: %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-02 02:49:53 +08:00
|
|
|
cmd := exec.Command(splitCmd[0], splitCmd[1:]...)
|
2023-09-22 19:52:45 +08:00
|
|
|
cmd.SysProcAttr = &syscall.SysProcAttr{
|
|
|
|
|
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(environments) > 0 {
|
|
|
|
|
cmd.Env = append(os.Environ(), environments...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var (
|
2025-02-18 23:23:28 +08:00
|
|
|
outbuf bytes.Buffer
|
2023-09-22 19:52:45 +08:00
|
|
|
stderr bytes.Buffer
|
|
|
|
|
)
|
2025-02-18 23:23:28 +08:00
|
|
|
cmd.Stdout = &outbuf
|
2023-09-22 19:52:45 +08:00
|
|
|
cmd.Stderr = &stderr
|
|
|
|
|
|
|
|
|
|
runErr := internal.RunTimeout(cmd, timeout)
|
|
|
|
|
|
2025-02-18 23:23:28 +08:00
|
|
|
outbuf = removeWindowsCarriageReturns(outbuf)
|
2024-05-11 05:43:43 +08:00
|
|
|
if stderr.Len() > 0 && !c.debug {
|
2023-09-22 19:52:45 +08:00
|
|
|
stderr = removeWindowsCarriageReturns(stderr)
|
2024-12-14 01:26:34 +08:00
|
|
|
stderr = truncate(stderr)
|
2023-09-22 19:52:45 +08:00
|
|
|
}
|
|
|
|
|
|
2025-02-18 23:23:28 +08:00
|
|
|
return outbuf.Bytes(), stderr.Bytes(), runErr
|
2023-09-22 19:52:45 +08:00
|
|
|
}
|