Go에서 셸 명령 실행

Jay Singh 2023년1월30일
  1. Go에서 os/exec 패키지를 사용하여 셸 명령 실행
  2. Go에서 인수를 전달하는 os/exec 패키지를 사용하여 셸 명령 실행
Go에서 셸 명령 실행

셸 명령은 시스템에 특정 작업을 수행하는 방법을 알려줍니다. 외부 명령은 exec 패키지를 통해 실행됩니다.

os/exec 패키지는 C 및 다른 언어의 시스템 라이브러리 호출과 달리 시스템 셸을 실행하지 않으며 glob 패턴을 확장하거나 셸과 같은 확장, 파이프라인 또는 리디렉션을 처리하지 않습니다.

패키지는 C의 exec 기능 제품군과 더 유사합니다.

이 문서에서는 Golang에서 셸 또는 외부 명령을 실행하는 방법을 배웁니다.

Go에서 os/exec 패키지를 사용하여 셸 명령 실행

Go의 os/exec 패키지를 사용하여 모든 OS 또는 시스템 명령을 트리거할 수 있습니다. 이를 수행하는 데 사용할 수 있는 두 가지 기능, 즉 cmd 개체를 생성하는 Command와 명령을 실행하고 표준 출력을 반환하는 Output을 제공합니다.

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    out, err := exec.Command("pwd").Output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(out))
}

출력:

It will return the location of your current working directory.

이제 os/exec 패키지를 사용하여 ls와 같은 간단한 명령을 실행하는 방법을 살펴보겠습니다.

먼저 fmt, os/exec 및 런타임의 세 가지 중요한 패키지를 가져와야 합니다. 그런 다음 코드 실행을 시작할 execute() 메서드를 구성합니다.

package main

import (
    "fmt"
    "os/exec"
    "runtime"
)
func execute() {

    out, err := exec.Command("ls").Output()
    if err != nil {
        fmt.Printf("%s", err)
    }
    fmt.Println("Program executed")
    output := string(out[:])
    fmt.Println(output)

}
func main() {
    if runtime.GOOS == "windows" {
        fmt.Println("This program is not aplicable for windows machine.")
    } else {
        execute()
    }
}

출력:

Program executed
bin
dev
etc
home
lib
lib64
proc
root
sys
tmp
tmpfs
usr
var

Go에서 인수를 전달하는 os/exec 패키지를 사용하여 셸 명령 실행

Command 함수는 지정된 매개변수로 제공된 프로그램을 실행할 수 있는 Cmd 구조체를 반환합니다. 첫 번째 인수는 수행할 프로그램입니다. 다른 인수는 프로그램 매개변수입니다.

package main

import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
    "strings"
)

func main() {
    cmd := exec.Command("tr", "a-z", "A-Z")

    cmd.Stdin = strings.NewReader("Hello Boss!")

    var out bytes.Buffer
    cmd.Stdout = &out

    err := cmd.Run()

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("New Message: %q\n", out.String())
}

출력:

New Message: "HELLO BOSS!"