当在 Windows 上使用 exec 包执行带有双引号参数的命令时,Windows 可能会解释引号标记为命令而不是分隔符。这可能会导致意外的行为和错误。
例如,以下代码片段尝试使用双引号参数执行 find 命令:
out, err := exec.Command("find", `"SomeText"`).Output()
但是,在 Windows 上,此将导致执行以下命令:
find /SomeText"
引号被解释为命令的一部分,而不是分隔参数。
要解决此问题并正确执行查找使用 exec 包在 Windows 上运行命令,可以使用以下方法:
<code class="go">package main import ( "fmt" "os" "os/exec" "syscall" ) func main() { cmd := exec.Command(`find`) cmd.SysProcAttr = &syscall.SysProcAttr{} cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt` out, err := cmd.Output() fmt.Printf("%s\n", out) fmt.Printf("%v\n", err) }</code>
在此代码中,SysProcAttr 字段用于显式设置进程的命令行。通过设置 CmdLine 字段来查找“SomeText”test.txt,命令将在双引号参数完好无损的情况下执行。
这种方法允许将双引号参数正确传递给命令,从而导致想要在 Windows 上执行。
以上是如何使用 exec 包在 Windows 上执行带有双引号参数的命令?的详细内容。更多信息请关注PHP中文网其他相关文章!