Dans Go, l'exploitation de la fonction exec.Command fournit un moyen puissant d'exécuter des commandes. Cependant, lorsqu'il s'agit d'exécuter des commandes avec redirection d'entrée, il est crucial de comprendre comment utiliser correctement exec.Command. Cette question explore comment exécuter une simple commande Bash qui lit à partir d'un fichier à l'aide de exec.Command.
L'objectif est d'exécuter la commande suivante depuis Go :
/sbin/iptables-restore < /etc/iptables.conf
Cette commande lit la configuration IPTables à partir du fichier spécifié et actualise les IPTables. Cependant, traduire cette commande directement en code Go à l'aide de exec.Command s'avère difficile.
La question décrit plusieurs tentatives infructueuses d'exécution de la commande avec exec.Command. Deux approches courantes sont :
Tentative de transmission de l'opérateur de redirection < comme argument :
cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf")
Tentative de rediriger le nom de fichier vers l'entrée standard de la commande :
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")
La clé pour exécuter avec succès la commande avec la redirection d'entrée réside dans l'utilisation d'une combinaison de ioutil.ReadFile et exec.Command. La solution suivante y parvient :
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) } }
En lisant d'abord le contenu du fichier de configuration IPTables, puis en l'écrivant sur l'entrée standard de la commande, nous effectuons efficacement l'opération de redirection d'entrée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!