Maison  >  Article  >  développement back-end  >  Pourquoi `exec.Command()` renvoie-t-il l'état de sortie 1 lors de l'exécution de commandes `sudo` dans Go ?

Pourquoi `exec.Command()` renvoie-t-il l'état de sortie 1 lors de l'exécution de commandes `sudo` dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 13:45:10605parcourir

Why Does `exec.Command()` Return Exit Status 1 When Running `sudo` Commands in Go?

Commande Os Exec Sudo dans Go

Contexte

Lors de l'exploration de Go et des goroutines, les utilisateurs peut rencontrer des difficultés à exécuter des commandes avec le format :

sudo find /folder -type f | while read i; do sudo -S chmod 644 "$i"; done

Question

  • Pourquoi la commande renvoie-t-elle "état de sortie 1" ?
  • Comment obtenir un aperçu plus détaillé erreur message ?

Réponse

  • Cause de l'état de sortie 1 : La fonction exec.Command() exécute le programme spécifié directement. Cependant, la commande donnée implique plusieurs programmes connectés via un script shell. Pour exécuter des scripts shell, utilisez la syntaxe suivante :
cmd := exec.Command("/bin/sh", "-c", "sudo find ...")
  • Messages d'erreur détaillés : Obtenez des messages d'erreur plus détaillés en exécutant la commande directement dans le terminal. En cas d'échec, recherchez les messages d'erreur dans la sortie du terminal.

Modifications du code

Voici le code modifié :

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("/bin/sh", "-c", "sudo find /folder -type f | while read i; do sudo -S chmod 644 \"\"; done")
    out, err := cmd.CombinedOutput()
    if err != nil {
        fmt.Printf("Error: %s\nOutput: %s", err, out)
    }
}

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