使用 exec.Command() 重定向輸入
在 Go 中發出帶有輸入重定向的命令可能是一個挑戰。考慮常見的命令列操作:
/sbin/iptables-restore < /etc/iptables.conf
此命令告訴 iptables-restore 從 /etc/iptables.conf 讀取其設定。我們如何使用 Go 的 exec.Command() 來完成此任務?
失敗的嘗試
初始嘗試將輸入檔案的路徑作為參數傳遞或將檔案名稱透過管道傳遞到 stdin不成功。
// Fails cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf") // Also fails cmd := exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") // Attempt to pipe file name into stdin // Fails cmd := exec.Command("/sbin/iptables-restore") stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } io.WriteString(stdin, "/etc/iptables.conf")
解決方案:閱讀和寫作檔案內容
要成功執行指令,我們必須先讀取/etc/iptables.conf 的內容,然後將這些內容寫入StdinPipe()。
package main import ( "io" "io/ioutil" "log" "os/exec" ) func main() { bytes, err := ioutil.ReadFile("/etc/iptables.conf") if err != nil { log.Fatal(err) } cmd := exec.Command("/sbin/iptables-restore") stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } _, err = io.WriteString(stdin, string(bytes)) if err != nil { log.Fatal(err) } }
以上是如何在 Go 中將輸入重定向到 exec.Command()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!