intake/web/shlex.go
2025-02-12 10:04:58 -08:00

45 lines
790 B
Go

package web
import (
"io"
"os/exec"
"strings"
)
func Shlex(cmd string) (argv []string, err error) {
xargs := exec.Command("xargs", "-n1")
stdin, err := xargs.StdinPipe()
if err != nil {
return
}
_, err = io.WriteString(stdin, cmd)
if err != nil {
return
}
err = stdin.Close()
if err != nil {
return
}
output, err := xargs.Output()
if err != nil {
return
}
argv = strings.Split(string(output), "\n")
if argv[len(argv)-1] == "" {
argv = argv[:len(argv)-1]
}
return
}
func Quote(argv []string) (cmd string, err error) {
argv = append([]string{"%q "}, argv...)
printf := exec.Command("printf", argv...)
output, err := printf.Output()
if err != nil {
return
}
cmd = string(output)
cmd = cmd[:len(cmd)-1] // strip off the last space from '%q '
return
}