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!