mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-02-11 14:21:19 +00:00
58 lines
1015 B
Go
58 lines
1015 B
Go
package common
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"os/exec"
|
|
)
|
|
|
|
type OsCommandLine struct {
|
|
Cmd string
|
|
Args []string
|
|
}
|
|
|
|
func GetListByCmdPipes(ctx context.Context, cmdlines []*OsCommandLine) ([]string, error) {
|
|
var buf bytes.Buffer
|
|
var err error
|
|
var cmds []*exec.Cmd
|
|
for _, cmdline := range cmdlines {
|
|
cmd := exec.Command(cmdline.Cmd, cmdline.Args...)
|
|
cmds = append(cmds, cmd)
|
|
fmt.Println(cmd)
|
|
}
|
|
for i := 0; i < len(cmds); i++ {
|
|
if i == len(cmds)-1 {
|
|
break
|
|
}
|
|
cmds[i+1].Stdin, err = cmds[i].StdoutPipe()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
cmds[len(cmds)-1].Stdout = &buf
|
|
for i := len(cmds) - 1; i >= 0; i-- {
|
|
_ = cmds[i].Start()
|
|
if i == 0 {
|
|
_ = cmds[i].Run()
|
|
}
|
|
}
|
|
for i := 1; i < len(cmds); i++ {
|
|
_ = cmds[i].Wait()
|
|
}
|
|
|
|
scanner := bufio.NewScanner(&buf)
|
|
var ret []string
|
|
for scanner.Scan() {
|
|
fmt.Printf("line: %s\n", scanner.Text())
|
|
ret = append(ret, scanner.Text())
|
|
}
|
|
|
|
if err := scanner.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return ret, nil
|
|
}
|