在 Go 中,利用 exec.Command 函数提供了一种执行命令的强大方法。然而,当涉及到使用输入重定向执行命令时,了解如何正确使用 exec.Command 至关重要。本问题探讨了如何运行一个简单的 Bash 命令,该命令使用 exec.Command 从文件中读取数据。
目标是从 Go 执行以下命令:
/sbin/iptables-restore < /etc/iptables.conf
此命令从指定文件中读取 IPTables 配置并刷新 IPTables。然而,使用 exec.Command 将此命令直接转换为 Go 代码具有挑战性。
该问题概述了使用 exec.Command 执行该命令的几次不成功的尝试。两种常见的方法是:
尝试传递重定向运算符
作为参数:cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf")
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")
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) } }通过首先读取 IPTables 配置文件的内容,然后将其写入命令的标准输入,我们有效地执行了输入重定向操作。
以上是如何使用 Go 的 `exec.Command` 执行带有输入重定向的命令?的详细内容。更多信息请关注PHP中文网其他相关文章!