ホームページ >バックエンド開発 >Golang >Go の「exec.Command」を使用して入力リダイレクトでコマンドを実行するにはどうすればよいですか?

Go の「exec.Command」を使用して入力リダイレクトでコマンドを実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-12 16:44:15575ブラウズ

How to Execute a Command with Input Redirection Using Go's `exec.Command`?

Go での入力リダイレクトを使用したコマンド実行: 総合ガイド

Go では、exec.Command 関数を利用することでコマンドを実行する強力な方法が提供されます。ただし、入力リダイレクトを使用してコマンドを実行する場合は、exec.Command の適切な使用方法を理解することが重要です。この質問では、exec.Command を使用してファイルから読み取る単純な Bash コマンドを実行する方法について説明します。

問題ステートメント

目的は、Go から次のコマンドを実行することです。

/sbin/iptables-restore < /etc/iptables.conf

このコマンドは、指定されたファイルから IPTables 構成を読み取り、IPTables を更新します。ただし、exec.Command を使用してこのコマンドを Go コードに直接変換するのは困難であることがわかります。

試行された解決策

この質問では、exec.Command を使用してコマンドを実行しようとして失敗したいくつかの試行について概説しています。一般的なアプローチは 2 つあります。

  1. リダイレクト演算子

    を渡そうとする。引数として:
    cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf")
  2. ファイル名をコマンドの標準入力にパイプしようとしています:
    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")

包括的なソリューション

入力リダイレクトを使用してコマンドを正常に実行する鍵は、次の組み合わせを使用することにあります。 ioutil.ReadFile と exec.Command。次のソリューションはこれを実現します。
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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。