一尘不染

如何使用带空格的字符串创建os.exec Command结构

go

我希望我的方法接收以字符串形式执行的命令。如果输入字符串中包含空格,如何将其拆分为os.exec的cmd,args?

文档说创建我的Exec.Cmd结构像

cmd := exec.Command("tr", "a-z", "A-Z")

这工作正常:

a := string("ifconfig")
cmd := exec.Command(a)
output, err := cmd.CombinedOutput()
fmt.Println(output) // prints ifconfig output

这将失败:

a := string("ifconfig -a")
cmd := exec.Command(a)
output, err := cmd.CombinedOutput()
fmt.Println(output) // 'ifconfig -a' not found

我尝试了strings.Split(a),但收到一条错误消息:不能在exec.Command的参数中使用(type [] string)作为类型string


阅读 305

收藏
2020-07-02

共1个答案

一尘不染

请检出:https :
//golang.org/pkg/os/exec/#example_Cmd_CombinedOutput

您的代码失败,因为 exec.Command 要求将命令参数与实际 命令名分 隔开。

strings.Split
签名(https://golang.org/pkg/strings/#Split):

func Split(s, sep string) []string

您尝试实现的目标:

command := strings.Split("ifconfig -a", " ")
if len(command) < 2 {
    // TODO: handle error
}
cmd := exec.Command(command[0], command[1:]...)
stdoutStderr, err := cmd.CombinedOutput()
if err != nil {
    // TODO: handle error more gracefully
    log.Fatal(err)
}
// do something with output
fmt.Printf("%s\n", stdoutStderr)
2020-07-02