Skip to content

2-1. Command Execution

Let's make a low-leveled container runtime!

go
package main

import (
	"log"
	"os"
	"os/exec"

	"github.com/cockroachdb/errors"
)

func main() {
	switch os.Args[1] {
	case "run":
		if err := run(os.Args[2:]); err != nil {
			log.Fatalf("%+v", err)
		}

	default:
		log.Fatalf("unknown command: %s", os.Args[1])
	}
}

func run(command []string) error {
	cmd := exec.Command(command[0], command[1:]...)
	cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr

	if err := cmd.Run(); err != nil {
		return errors.WithStack(err)
	}

	return nil
}