Ejemplo n.º 1
0
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
}