os/execRun external commands with structured arguments (no shell unless you ask for it).
import "os/exec"
cmd := exec.Command("git", "status", "-sb")
out, err := cmd.Output()
out, err := exec.Command("go", "version").CombinedOutput()
cmd := exec.Command("long", "running")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
import (
"context"
"os/exec"
"time"
)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
cmd := exec.CommandContext(ctx, "sleep", "10")
err := cmd.Run()
cmd := exec.Command("make")
cmd.Dir = "/path/to/project"
cmd.Env = append(os.Environ(), "GOOS=linux")
Avoid sh -c with user input (injection). Prefer argv slices. If you must interpolate, validate aggressively.
var exit *exec.ExitError
if errors.As(err, &exit) {
code := exit.ExitCode()
_ = code
}