首页 >后端开发 >Golang >如何在 Go 中安全地执行带有可变参数的系统命令?

如何在 Go 中安全地执行带有可变参数的系统命令?

DDD
DDD原创
2024-12-13 08:00:19323浏览

How to Safely Execute System Commands with Variable Arguments in Go?

使用可变参数执行系统命令

执行涉及多个参数的系统命令时,有必要将命令与参数分开。下面的代码说明了这个概念:

import (
    "fmt"
    "os/exec"
    "strings"
    "sync"
)

func exeCmd(cmd string, wg *sync.WaitGroup) {
    fmt.Println("command is ", cmd)
    // Splitting head (e.g., "g++") from the rest of the command (e.g., "-c file.cpp")
    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() // Signal to waitgroup that this goroutine is done
}

func main() {
    wg := new(sync.WaitGroup)
    wg.Add(3)

    x := []string{
        "echo newline >> foo.o",
        "echo newline >> f1.o",
        "echo newline >> f2.o"}

    go exeCmd(x[0], wg)
    go exeCmd(x[1], wg)
    go exeCmd(x[2], wg)

    wg.Wait()
}

在此代码中:

  • exec.Command(head, parts...) 使用 Go 的可变参数将命令与参数分开.
  • head 变量包含系统命令(例如,“echo”)。
  • 各部分变量包含剩余的参数(例如,“newline >> foo.o”)。
  • strings.Fields(cmd) 函数用于将命令拆分为其组成部分。

使用这种方法,程序可以使用任意数量的参数执行系统命令。它克服了原始代码对于多单词命令失败的限制。

以上是如何在 Go 中安全地执行带有可变参数的系统命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

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