首頁 >後端開發 >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