php小編蘋果為您介紹如何在Go中執行前台或後台shell指令。在Go語言中,執行shell指令非常簡單。透過使用os/exec包,我們可以輕鬆地執行各種shell命令,並取得其輸出。無論是執行前台命令還是後台命令,Go語言都提供了相應的方法。在本文中,我們將學習如何使用Go語言來執行前台或後台shell指令,並探討一些常見的用例。讓我們開始吧!
在go 中,我需要能夠從使用者執行shell 命令,並且僅阻止在前台運行的命令(不使用&
運行),同時檢索命令的輸出。
例如,在 bash 中我們可以:
#!/bin/bash while read -p 'enter a command: ' cmd; do /bin/sh -c "$cmd" >(sed 's/^/line of output: /') done
使用者可以輸入類似sleep 5這樣的前台命令; echo hi
會阻塞並且提示不會立即重新出現,或者他們可以輸入後台命令,如{ sleep 5;迴聲嗨; &
並且它不會阻塞,並且當命令在背景運行時,提示符會立即重新出現。
我如何在 go 中重新建立它?這是我的嘗試:
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) } } }
運行 sleep 5; echo hi
會阻塞並且可以工作,但是 { sleep 5;迴聲嗨; } &
錯誤:
panic: read |0: file already closed
對於上下文,我將語音控制移植到 go,用戶可以在其中配置 runtype
等操作,其中他們的命令通過 shell 運行,並模擬按鍵以鍵入輸出。使用者可以使用後台命令,以便語音控制與命令一起繼續,例如,他們可以在說出「選單」時啟動選單,並且在開啟時仍然能夠使用語音控制: menu: runtype printf %s\\n這個那個| dmenu &
。
將 stdout 設定為命名管道即可實現該行為。
以上是如何在 Go 中執行前台或後台 shell 指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!