Home > Backend Development > Golang > How to Properly Redirect Input to `exec.Command` in Go for Commands Like `iptables-restore`?

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

DDD
Release: 2024-12-11 17:50:16
Original
985 people have browsed it

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

exec.Command with Input Redirection

To execute a bash command from Go, exec.Command() provides a straightforward solution. However, redirecting input to the command can be a challenge.

Consider the need to update IPTables using the command "/sbin/iptables-restore < /etc/iptables.conf." Attempts to invoke this command using exec.Command() have proven unsuccessful.

To address this, a strategy of providing the filename as input to cmd.StdinPipe() was employed:

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")
Copy after login

However, this approach remained ineffective. A viable solution involves reading the content of "/etc/iptables.conf" and writing it to 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)
    }
}
Copy after login

The above is the detailed content of How to Properly Redirect Input to `exec.Command` in Go for Commands Like `iptables-restore`?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template