php-Editor Apple stellt Ihnen vor, wie Sie Front- oder Hintergrund-Shell-Befehle in Go ausführen. In der Go-Sprache ist das Ausführen von Shell-Befehlen sehr einfach. Mithilfe des Pakets os/exec können wir problemlos verschiedene Shell-Befehle ausführen und deren Ausgabe erhalten. Unabhängig davon, ob Vordergrundbefehle oder Hintergrundbefehle ausgeführt werden, bietet die Go-Sprache entsprechende Methoden. In diesem Artikel lernen wir, wie man Front- oder Hintergrund-Shell-Befehle mit der Go-Sprache ausführt, und untersuchen einige häufige Anwendungsfälle. Lasst uns beginnen!
In go muss ich in der Lage sein, Shell-Befehle vom Benutzer auszuführen und nur Befehle zu blockieren, die im Vordergrund ausgeführt werden (nicht mit &
ausgeführt werden), während ich die Ausgabe des Befehls abrufe.
Zum Beispiel können wir in Bash:
#!/bin/bash while read -p 'enter a command: ' cmd; do /bin/sh -c "$cmd" >(sed 's/^/line of output: /') done
Benutzer können etwas wie sleep 5这样的前台命令; echo hi
会阻塞并且提示不会立即重新出现,或者他们可以输入后台命令,如 { sleep 5;回声嗨; &
eingeben und es wird nicht blockiert und die Eingabeaufforderung wird sofort wieder angezeigt, während der Befehl im Hintergrund ausgeführt wird.
Wie kann ich es in Go neu erstellen? Hier ist mein Versuch:
package main import ( "bufio" "os" "os/exec" ) func main() { input := bufio.newscanner(os.stdin) for { print("enter a command: ") input.scan() cmd := exec.command("/bin/sh", "-c", input.text()) stdout, err := cmd.stdoutpipe() if err != nil { panic(err) } go func() { output := bufio.newscanner(stdout) for output.scan() { println("line of output: " + output.text()) } if output.err() != nil { panic(output.err()) } }() if err := cmd.start(); err != nil { panic(err) } if err := cmd.wait(); err != nil { panic(err) } } }
Ausführen sleep 5; echo hi
会阻塞并且可以工作,但是 { sleep 5;回声嗨; } &
Fehler:
panic: read |0: file already closed
Für den Kontext habe ich die Sprachsteuerung so portiert, dass der Benutzer sie konfigurieren kann runtype
等操作,其中他们的命令通过 shell 运行,并模拟按键以键入输出。用户可以使用后台命令,以便语音控制与命令一起继续,例如,他们可以在说出“菜单”时启动菜单,并且在打开时仍然能够使用语音控制: menu: runtype printf %s\n 这个那个 | dmenu &
.
Setzen Sie stdout auf eine benannte Pipe, um dieses Verhalten zu erreichen.
Das obige ist der detaillierte Inhalt vonSo führen Sie Vordergrund- oder Hintergrund-Shell-Befehle in Go aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!