【问题标题】:Modify arguments after calling exec.Cmd() in Go在 Go 中调用 exec.Cmd() 后修改参数
【发布时间】:2017-12-06 05:35:01
【问题描述】:

我正在尝试使用exec.Cmd(command, flags...) 运行命令,并希望在调用cmd.Run() 函数之前能够灵活地修改参数。

例如:

cmd := exec.Command("echo", "hello world")
cmd.Env = []string{"env1=1"}
cmd.Args = []string{"echo2", "oh wait I changed my mind"}
cmd.Run()

上面的代码似乎一直在运行echo hello world而不是echo2 oh wait I changed my mind

我期望运行echo2 而不是echo 是否正确?

【问题讨论】:

  • 注意,调用exec.Command时,第一个参数是命令,后面的参数是args。因此,您的代码将实际执行更改为(shell 等效项)echo "echo2" "oh wait I changed my mind"。要更改要执行的命令,而不仅仅是其参数,您必须更新 cmd.Path
  • 啊,谢谢@Adrian。好像是这样:)。

标签: go command


【解决方案1】:

更改要执行的命令时,还必须设置cmd.Path,如exec.Command

cmd := exec.Command("echo", "hello world")
cmd.Env = []string{"env1=1"}
cmd.Args = []string{"echo2", "oh wait I changed my mind"}

lp, err := exec.LookPath("echo2")
if err != nil {
    // handle error
}

cmd.Path = lp
if err := cmd.Run(); err != nil {
    // handle error
}

【讨论】:

  • 感谢您的回答 Cerise 和 @Tom
猜你喜欢
  • 2018-12-09
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
相关资源
最近更新 更多