Maison > développement back-end > Golang > Comment exécuter en toute sécurité des commandes système avec des arguments variables dans Go ?

Comment exécuter en toute sécurité des commandes système avec des arguments variables dans Go ?

DDD
Libérer: 2024-12-13 08:00:19
original
327 Les gens l'ont consulté

How to Safely Execute System Commands with Variable Arguments in Go?

Exécution de commandes système avec des arguments variables

Lors de l'exécution de commandes système impliquant plusieurs arguments, il devient nécessaire de séparer la commande des arguments. Le code ci-dessous illustre ce concept :

import (
    "fmt"
    "os/exec"
    "strings"
    "sync"
)

func exeCmd(cmd string, wg *sync.WaitGroup) {
    fmt.Println("command is ", cmd)
    // Splitting head (e.g., "g++") from the rest of the command (e.g., "-c file.cpp")
    parts := strings.Fields(cmd)
    head := parts[0]
    parts = parts[1:len(parts)]

    out, err := exec.Command(head, parts...).Output()
    if err != nil {
        fmt.Printf("%s", err)
    }
    fmt.Printf("%s", out)
    wg.Done() // Signal to waitgroup that this goroutine is done
}

func main() {
    wg := new(sync.WaitGroup)
    wg.Add(3)

    x := []string{
        "echo newline >> foo.o",
        "echo newline >> f1.o",
        "echo newline >> f2.o"}

    go exeCmd(x[0], wg)
    go exeCmd(x[1], wg)
    go exeCmd(x[2], wg)

    wg.Wait()
}
Copier après la connexion

Dans ce code :

  • exec.Command(head, parts...) sépare la commande des arguments à l'aide des arguments variadiques de Go .
  • La variable head contient la commande système (par exemple, "echo").
  • La variable parts contient le reste arguments (par exemple, "newline >> foo.o").
  • La fonction strings.Fields(cmd) est utilisée pour diviser la commande en ses parties constitutives.

En utilisant cette approche, le programme peut exécuter des commandes système avec un nombre arbitraire d'arguments. Il surmonte la limitation du code original, qui échouait pour les commandes comportant plusieurs mots.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal