首页 >后端开发 >Golang >对于像'iptables-restore”这样的命令,如何正确地将输入重定向到 Go 中的'exec.Command”?

对于像'iptables-restore”这样的命令,如何正确地将输入重定向到 Go 中的'exec.Command”?

DDD
DDD原创
2024-12-11 17:50:161050浏览

How to Properly Redirect Input to `exec.Command` in Go for Commands Like `iptables-restore`?

带有输入重定向的 exec.Command

要从 Go 执行 bash 命令,exec.Command() 提供了一个简单的解决方案。然而,将输入重定向到命令可能是一个挑战。

考虑需要使用命令“/sbin/iptables-restore /iptables.conf”来更新 IPTables。尝试使用 exec.Command() 调用此命令已被证明是不成功的。

为了解决此问题,采用了提供文件名作为 cmd.StdinPipe() 输入的策略:

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”的内容并将其写入 cmd.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)
    }
}

以上是对于像'iptables-restore”这样的命令,如何正确地将输入重定向到 Go 中的'exec.Command”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn