入力リダイレクトを使用した 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 サイトの他の関連記事を参照してください。