Run launches the tool's CLI binary inheriting stdio (interactive mode). Extra args are appended after the injected cli_parameters.
(launch LaunchEnv, args []string)
| 83 | // Run launches the tool's CLI binary inheriting stdio (interactive mode). |
| 84 | // Extra args are appended after the injected cli_parameters. |
| 85 | func Run(launch LaunchEnv, args []string) (int, error) { |
| 86 | command := launch.Tool.LaunchCommand() |
| 87 | if command == "" { |
| 88 | return 1, fmt.Errorf("tools: no cli_command for tool %s", launch.Tool.Name) |
| 89 | } |
| 90 | if _, err := exec.LookPath(command); err != nil { |
| 91 | return 127, fmt.Errorf("tools: %s not found on PATH (install with `cam install %s`)", command, launch.Tool.Name) |
| 92 | } |
| 93 | final := append([]string{}, launch.Inject...) |
| 94 | final = append(final, args...) |
| 95 | cmd := exec.Command(command, final...) |
| 96 | cmd.Env = envMapToSlice(launch.Env) |
| 97 | cmd.Stdin = os.Stdin |
| 98 | cmd.Stdout = os.Stdout |
| 99 | cmd.Stderr = os.Stderr |
| 100 | if err := cmd.Run(); err != nil { |
| 101 | if exit, ok := err.(*exec.ExitError); ok { |
| 102 | return exit.ExitCode(), nil |
| 103 | } |
| 104 | return 1, err |
| 105 | } |
| 106 | return 0, nil |
| 107 | } |
| 108 | |
| 109 | func envMapToSlice(env map[string]string) []string { |
| 110 | out := make([]string, 0, len(env)) |
no test coverage detected