Exécuter plusieurs commandes dans un seul shell dans Go
Exécuter plusieurs commandes consécutivement est une tâche courante dans les scripts shell. Bien que le package os/exec de Go fournisse des fonctionnalités pour exécuter des commandes, il se peut que la manière d'exécuter plusieurs commandes dans le même shell ne soit pas immédiatement évidente. Cet article fournit des solutions à ce problème.
Dans l'exemple de code fourni, l'objectif est d'exécuter cd, ./configure et de créer des commandes dans l'ordre. Initialement, le code tente d'accomplir cela en démarrant chaque commande séparément, mais cette approche échoue car chaque commande est exécutée dans un nouveau shell, ce qui entraîne l'erreur « aucun fichier ou répertoire de ce type » pour ./configure.
Pour exécuter des commandes au sein d'un même shell, on peut utiliser la syntaxe suivante :
cmd := exec.Command("/bin/sh", "-c", "command1; command2; command3; ...") err := cmd.Run()
Ici, le shell, /bin/sh, est invoqué avec l'option -c qui lui permet d'interpréter le commandes fournies. Cependant, cette méthode nécessite une gestion minutieuse des entrées de l'utilisateur pour éviter les vulnérabilités d'injection de shell.
Une approche alternative consiste à définir le répertoire de travail actuel avant d'exécuter les commandes :
config := exec.Command("./configure", "--disable-yasm") config.Dir = folderPath build := exec.Command("make") build.Dir = folderPath
Cette approche garantit que les commandes sont exécutées dans le répertoire spécifié sans dépendre du shell. Il imite le comportement de l'exécution de cd path, puis de l'exécution de ./configure et make au sein de la même session de terminal.
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!