使用exec.Command() 執行指令時,可以執行包含管道的指令,讓您將多個指令連結在一起。
例如,以下命令運行ps cax 和成功:
out, err := exec.Command("ps", "cax").Output()
但是,嘗試使用以下命令將ps cax 的輸出通過管道傳輸到grep myapp 會失敗:
out, err := exec.Command("ps", "cax | grep myapp").Output()
要解決這個問題,我們可以用更慣用的方法在Go中使用管道的方法:
package main import ( "fmt" "os/exec" ) func main() { grep := exec.Command("grep", "redis") ps := exec.Command("ps", "cax") // Connect ps's stdout to grep's stdin. pipe, _ := ps.StdoutPipe() defer pipe.Close() grep.Stdin = pipe // Start ps first. ps.Start() // Run and retrieve the output of grep. res, _ := grep.Output() fmt.Println(string(res)) }
在此範例中,我們建立兩個exec.Cmd 結構體,一個對於每個命令,然後在ps 的標準輸出和grep 的標準輸入之間建立一個管道。透過先啟動 ps,我們確保其輸出可供 grep 使用。隨後,我們運行 grep 並檢索其輸出,有效地將兩個命令連結在一起。
以上是如何使用 Go 的 exec.Command() 有效執行管道命令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!