45 lines
790 B
Go
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
|
|
}
|