首页  >  文章  >  后端开发  >  如何在 Windows 上的 Go 的 Exec 包中执行带双引号参数的命令?

如何在 Windows 上的 Go 的 Exec 包中执行带双引号参数的命令?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-30 20:13:30689浏览

How to Execute Commands with Double Quoted Arguments in Go's Exec Package on Windows?

在 Windows 的 Exec 包中执行带有双引号参数的命令

使用 exec 包执行命令在处理双引号时需要特别注意争论,尤其是在 Windows 环境中。本文深入研究了涉及 find 命令的特殊问题,并提供了正确执行该命令的解决方案。

尝试执行如下命令时会出现问题:

out, err := exec.Command("find", `"SomeText"`).Output()

在 Windows 上,此由于双引号导致命令失败,导致参数被转义为:

find /SomeText"

要解决此问题,需要更复杂的方法,如以下代码所示:

<code class="go">package main

import (
    "fmt"
    "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>

在这段代码中,我们:

  • 设置cmd的SysProcAttr字段来自定义进程属性。
  • 使用CmdLine字段来指定要执行的确切命令行,包括带引号的参数。

这种方法允许我们按预期使用双引号参数执行 find 命令。然而,值得注意的是,Go 文档中没有明确记录此行为,这表明它可能不是一个广为人知的功能。

以上是如何在 Windows 上的 Go 的 Exec 包中执行带双引号参数的命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn