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
Libérer: 2024-12-13 04:37:20
original
552 Les gens l'ont consulté

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()
Copier après la connexion

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()
}
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal