package acme import ( "log" "os/exec" "strings" ) type Hooker map[string]struct{} func execHook(s string) error { cmd := strings.Fields(s) return exec.Command(cmd[0], cmd[1:]...).Run() } func NewHooker() Hooker { return make(Hooker) } func (h Hooker) Notice(cmd string) { h[cmd] = struct{}{} } func (h Hooker) Execute() { for cmd := range h { if err := execHook(cmd); err != nil { log.Println(cmd, err) } } }