diff --git a/helpers/execembed.go b/helpers/execembed.go new file mode 100644 index 00000000000..0fa7aac8788 --- /dev/null +++ b/helpers/execembed.go @@ -0,0 +1,30 @@ +package helpers + +import ( + "bytes" + "os/exec" + + jww "github.com/spf13/jwalterweatherman" +) + +func Exec(args ...string) string { + var out bytes.Buffer + var stderr bytes.Buffer + var arg []string + if len(args) == 0 { + jww.ERROR.Print("Nothing to execute") + return "Nothing to execute" + } + name := args[0] + if len(args) > 1 { + arg = args[1 : len(args)-1] + } + cmd := exec.Command(name, arg...) + cmd.Stdout = &out + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + jww.ERROR.Print("Error executing", err, stderr.String()) + return stderr.String() + } + return out.String() +} diff --git a/tpl/template.go b/tpl/template.go index 3cf983ce035..ee7da443f93 100644 --- a/tpl/template.go +++ b/tpl/template.go @@ -831,6 +831,10 @@ func Highlight(in interface{}, lang string) template.HTML { return template.HTML(helpers.Highlight(html.UnescapeString(str), lang)) } +func Exec(args ...string) template.HTML { + return template.HTML(helpers.Exec(args...)) +} + func Markdownify(text string) template.HTML { return template.HTML(helpers.RenderBytes(helpers.RenderingContext{Content: []byte(text), PageFmt: "markdown"})) } @@ -1275,6 +1279,7 @@ func init() { "delimit": Delimit, "sort": Sort, "highlight": Highlight, + "exec": Exec, "add": func(a, b interface{}) (interface{}, error) { return doArithmetic(a, b, '+') }, "sub": func(a, b interface{}) (interface{}, error) { return doArithmetic(a, b, '-') }, "div": func(a, b interface{}) (interface{}, error) { return doArithmetic(a, b, '/') },