Maison >développement back-end >Golang >Comment puis-je exécuter correctement les commandes système multi-mots dans Go ?

Comment puis-je exécuter correctement les commandes système multi-mots dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-13 04:37:20619parcourir

How Can I Correctly Execute Multi-Word System Commands in Go?

Surmonter l'ambiguïté des arguments dans l'exécution des commandes système

Dans ce scénario, vous souhaitez exécuter des commandes système qui ressemblent à l'ajout de contenu à un fichier. Cependant, lorsque la commande dépasse un seul mot, votre programme rencontre des erreurs.

Identification du problème
Le code initial tente d'exécuter la commande directement, sans parvenir à faire la distinction entre la commande et ses arguments. Cela pose problème lorsque la commande comprend plusieurs mots.

Solution
Une façon de résoudre ce problème consiste à utiliser le Shell comme intermédiaire, comme le montre la solution proposée :

out, err := exec.Command("sh", "-c", cmd).Output()

L'indicateur -c demande au Shell d'interpréter cmd comme une commande, permettant au programme de spécifier à la fois la commande et ses arguments séparément.

Approche alternative et efficace
Une approche plus efficace et plus simple utilise les arguments variadiques de Go :

func exeCmd(cmd string, wg *sync.WaitGroup) {
  parts := strings.Fields(cmd)
  head := parts[0]
  parts = parts[1:len(parts)]

  out, err := exec.Command(head, parts...).Output()
}

Dans cette approche, la commande est divisée en sa tête (la commande principale) et une tranche contenant les arguments restants. La tête et les parties sont ensuite transmises comme arguments à exec.Command.

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!

Déclaration:
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