(cmd string, inputs [][]byte, args ...string)
| 241 | } |
| 242 | |
| 243 | func (c CLI) shellExecInput(cmd string, inputs [][]byte, args ...string) (*string, error) { |
| 244 | cm := exec.Command(cmd, args...) |
| 245 | var stderr bytes.Buffer |
| 246 | cm.Stderr = &stderr |
| 247 | |
| 248 | stdin, err := cm.StdinPipe() |
| 249 | if err != nil { |
| 250 | return nil, err |
| 251 | } |
| 252 | |
| 253 | stdout, err := cm.StdoutPipe() |
| 254 | if err != nil { |
| 255 | return nil, err |
| 256 | } |
| 257 | |
| 258 | buf := bytes.NewBuffer(nil) |
| 259 | go func() { |
| 260 | _, err := io.Copy(buf, stdout) |
| 261 | if err != nil { |
| 262 | log.Println("io.Copy failed: ", err.Error()) |
| 263 | } |
| 264 | }() |
| 265 | |
| 266 | if err := cm.Start(); err != nil { |
| 267 | panic(err) |
| 268 | } |
| 269 | |
| 270 | for _, i := range inputs { |
| 271 | _, err := stdin.Write(i) |
| 272 | if err != nil { |
| 273 | log.Println("Write failed: ", err.Error()) |
| 274 | } |
| 275 | } |
| 276 | |
| 277 | if err := cm.Wait(); err != nil { |
| 278 | fmt.Println(stderr.String()) |
| 279 | return nil, err |
| 280 | } |
| 281 | |
| 282 | result := buf.String() |
| 283 | return &result, nil |
| 284 | } |
no test coverage detected