Rah*_*hul 100

我发现了一种相对不错的方法来实现同样的目标.

out, err := exec.Command("sh","-c",cmd).Output()

对我有用,直到现在.仍然找到更好的方法来实现同样的目标.

EDIT1:

最后,一个更简单有效(至少到目前为止)的方式就是这样

func exe_cmd(cmd string, wg *sync.WaitGroup) {
  fmt.Println("command is ",cmd)
  // splitting head => g++ parts => rest of the command
  parts := strings.Fields(cmd)
  head := parts[0]
  parts = parts[1:len(parts)]

  out, err := exec.Command(head,parts...).Output()
  if err != nil {
    fmt.Printf("%s", err)
  }
  fmt.Printf("%s", out)
  wg.Done() // Need to signal to waitgroup that this goroutine is done
}

感谢go和人们的可变参数向我指出:)

  • 它适用于问题中提到的字符串.但是,如果你尝试执行类似"echo new >> test.txt"的内容,它会中断.:( (5认同)
  • 如果你想用"command1 && command2"这样的多个部分做命令,那么第一个(pre-ediut)方法就可以了,即使第二个失败了. (4认同)
  • 我认为在诸如"date +"%y%m%d"`之类的情况下会失败 (2认同)
  • 对于 Windows,相当于 `cmd := exec.Command("C:\\Windows\\System32\\cmd.exe", "/c", command)`。您可能应该使用 `exec.LookPath` 从 `$PATH`/`%PATH%` 获取系统的 shell 路径。 (2认同)