>백엔드 개발 >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").
  • parts 변수에는 나머지 인수가 포함됩니다(예: "newline >> foo.o").
  • strings.Fields(cmd) 함수는 다음과 같이 사용됩니다. 명령을 구성 요소로 분할합니다.

이 접근 방식을 사용하면 프로그램은 임의 개수의 시스템 명령을 실행할 수 있습니다. 인수. 여러 단어로 구성된 명령에 실패했던 원본 코드의 한계를 극복했습니다.

위 내용은 Go에서 가변 인수를 사용하여 시스템 명령을 안전하게 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.