Maison  >  Article  >  développement back-end  >  Comment exécuter plusieurs commandes Shell de manière séquentielle dans Go ?

Comment exécuter plusieurs commandes Shell de manière séquentielle dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 05:06:11772parcourir

How to Execute Multiple Shell Commands Sequentially in Go?

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!

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