Go에서 셸 명령 실행
Jay Singh
2023년1월30일
셸 명령은 시스템에 특정 작업을 수행하는 방법을 알려줍니다. 외부 명령은 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!"