Maison >développement back-end >Golang >Comment exécuter plusieurs commandes « exec » de manière séquentielle dans le même shell à l'aide de Go ?

Comment exécuter plusieurs commandes « exec » de manière séquentielle dans le même shell à l'aide de Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-26 17:43:111027parcourir

How to Run Multiple `exec` Commands Sequentially in the Same Shell Using Go?

Exécuter plusieurs commandes d'exécution dans le même shell à l'aide de Go

Dans le package os/exec de Go, l'exécution simultanée de plusieurs commandes présente un défi . Cet article traite d'un cas spécifique où l'exécution de commandes séquentiellement et dans le même shell est souhaitée.

Description du problème

Le code fourni tente d'exécuter trois commandes successivement :

cd path; ./configure; make

Cependant, la deuxième commande, ./configure, échoue avec une erreur « aucun fichier ou répertoire de ce type » car le répertoire de travail n'est pas défini.

Solution utilisant un shell

Pour exécuter des commandes dans une seule instance de shell, l'approche suivante peut être utilisée :

cmd := exec.Command("/bin/sh", "-c", "cd path; ./configure; make")
err := cmd.Run()

Cette commande appelle le shell (/bin/sh) avec l'option -c, qui exécute les commandes fournies séquentiellement dans le shell. Cela permet à cd de modifier le répertoire de travail pour les commandes suivantes.

Solution utilisant le répertoire de travail

Alternativement, si seul un répertoire spécifique doit être défini pour les commandes, le Le répertoire de travail peut être défini manuellement :

config := exec.Command("./configure", "--disable-yasm")
config.Dir = folderPath
build := exec.Command("make")
build.Dir = folderPath

En définissant le champ Dir de la commande, le répertoire de travail est modifié avant l'exécution de la commande, garantissant ainsi que les commandes s'exécutent dans le bon répertoire.

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