Ausführen eines Shell-Befehls in Go

Jay Singh 30 Januar 2023
  1. Ausführen von Shell-Befehlen mit dem os/exec-Paket in Go
  2. Ausführen des Shell-Befehls mit dem Paket os/exec und Übergabe des Arguments in Go
Ausführen eines Shell-Befehls in Go

Shell-Befehle teilen dem System mit, wie eine bestimmte Aufgabe ausgeführt werden soll. Externe Befehle werden über das Paket exec ausgeführt.

Das os/exec-Paket führt im Gegensatz zum Systembibliotheksaufruf von C und anderen Sprachen nicht die System-Shell aus und erweitert keine Glob-Muster oder handhabt irgendwelche Shell-ähnlichen Erweiterungen, Pipelines oder Umleitungen.

Das Paket ähnelt eher der exec-Familie von Funktionen in C.

In diesem Artikel erfahren Sie, wie Sie Shell- oder externe Befehle in Golang ausführen.

Ausführen von Shell-Befehlen mit dem os/exec-Paket in Go

Jeder Betriebssystem- oder Systembefehl kann mit dem os/exec-Paket von Go ausgelöst werden. Es bietet zwei Funktionen, die dazu verwendet werden können: Command, das das Objekt cmd erstellt, und Output, das das Kommando ausführt und die Standardausgabe zurückgibt.

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))
}

Ausgabe:

It will return the location of your current working directory.

Sehen wir uns nun an, wie wir das Paket os/exec verwenden können, um einfache Befehle wie ls auszuführen.

Zuerst müssen wir die drei entscheidenden Pakete importieren, d. h. fmt, os/exec und runtime. Danach konstruieren wir eine execute()-Methode, die mit der Ausführung des Codes beginnt.

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()
    }
}

Ausgabe:

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

Ausführen des Shell-Befehls mit dem Paket os/exec und Übergabe des Arguments in Go

Die Funktion Command gibt eine Cmd-Struktur zurück, die das mitgelieferte Programm mit den angegebenen Parametern ausführen kann. Das erste Argument ist das auszuführende Programm; die anderen Argumente sind die Programmparameter.

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())
}

Ausgabe:

New Message: "HELLO BOSS!"