ホームページ > バックエンド開発 > Golang > Go で「iptables-restore」のようなコマンドの入力を「exec.Command」に適切にリダイレクトする方法

Go で「iptables-restore」のようなコマンドの入力を「exec.Command」に適切にリダイレクトする方法

DDD
リリース: 2024-12-11 17:50:16
オリジナル
983 人が閲覧しました

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

入力リダイレクトを使用した exec.Command

Go から bash コマンドを実行するには、exec.Command() が簡単な解決策を提供します。ただし、入力をコマンドにリダイレクトするのは難しい場合があります。

コマンド「/sbin/iptables-restore < /etc/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)
    }
}
ログイン後にコピー
に書き込むことが含まれます。

以上がGo で「iptables-restore」のようなコマンドの入力を「exec.Command」に適切にリダイレクトする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート