Ausführen eines Shell-Befehls in Go
- Ausführen von Shell-Befehlen mit dem os/exec-Paket in Go
- Ausführen des Shell-Befehls mit dem Paket os/exec und Übergabe des Arguments 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!"