當在Go 中使用exec.Command() 執行命令時,透過管道傳輸一個命令的輸出向他人發出命令可能具有挑戰性。
請考慮以下事項例如:
out, err := exec.Command("ps", "cax").Output() // Works and prints command output
但是,當嘗試將ps 的輸出透過管道傳送到grep 時,此指令失敗,退出狀態為1:
out, err := exec.Command("ps", "cax | grep myapp").Output() // Fails
要解決這個問題,更慣用的方法是對每個命令使用exec.Command() 並直接連接其標準輸入/輸出流。操作方法如下:
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 get the output of grep. res, _ := grep.Output() fmt.Println(string(res)) }
這允許您執行多個命令並根據需要通過管道傳輸它們的輸入和輸出,從而提供靈活的方式來處理命令鏈。
以上是如何在 Go 的 `exec.Command()` 中正確管道指令輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!