func command(stmt *gohanscript.Stmt) (func(*gohanscript.Context) (interface{}, error), error) { var err error stmt.Args, err = gohanscript.MapToValue(util.MaybeMap(stmt.RawData["args"])) if err != nil { return nil, err } stmt.Args["command"], err = gohanscript.NewValue(stmt.RawData["command"]) if err != nil { return nil, err } return func(context *gohanscript.Context) (interface{}, error) { chdir := stmt.Arg("chdir", context) if chdir != nil { currentDir, _ := filepath.Abs(".") os.Chdir(util.MaybeString(chdir)) defer os.Chdir(currentDir) } command := util.MaybeString(stmt.Arg("command", context)) parts := strings.Fields(command) result, err := exec.Command(parts[0], parts[1:]...).CombinedOutput() return string(result), err }, nil }