Go では、exec.Command 関数を利用することでコマンドを実行する強力な方法が提供されます。ただし、入力リダイレクトを使用してコマンドを実行する場合は、exec.Command の適切な使用方法を理解することが重要です。この質問では、exec.Command を使用してファイルから読み取る単純な Bash コマンドを実行する方法について説明します。
目的は、Go から次のコマンドを実行することです。
/sbin/iptables-restore < /etc/iptables.conf
このコマンドは、指定されたファイルから IPTables 構成を読み取り、IPTables を更新します。ただし、exec.Command を使用してこのコマンドを Go コードに直接変換するのは困難であることがわかります。
この質問では、exec.Command を使用してコマンドを実行しようとして失敗したいくつかの試行について概説しています。一般的なアプローチは 2 つあります。
リダイレクト演算子
を渡そうとする。引数として: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 中国語 Web サイトの他の関連記事を参照してください。