如何在 Go 中執行前台或後台 shell 指令
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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)