Code-Memo

os/exec

Run external commands with structured arguments (no shell unless you ask for it).

Command with arguments
import "os/exec"

cmd := exec.Command("git", "status", "-sb")
out, err := cmd.Output()
Combined output / stderr
out, err := exec.Command("go", "version").CombinedOutput()
Streaming
cmd := exec.Command("long", "running")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
Context cancellation
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()
Environment and dir
cmd := exec.Command("make")
cmd.Dir = "/path/to/project"
cmd.Env = append(os.Environ(), "GOOS=linux")
Shell scripts

Avoid sh -c with user input (injection). Prefer argv slices. If you must interpolate, validate aggressively.

Exit codes
var exit *exec.ExitError
if errors.As(err, &exit) {
	code := exit.ExitCode()
	_ = code
}