Heim >Backend-Entwicklung >Golang >Wie führe ich in Go mehrere Befehle nacheinander in einer einzelnen Shell-Instanz aus?

Wie führe ich in Go mehrere Befehle nacheinander in einer einzelnen Shell-Instanz aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-25 05:35:14807Durchsuche

How to Run Multiple Commands Sequentially in a Single Shell Instance in Go?

Mehrere Befehle nacheinander in derselben Shell ausführen: Analyse und Lösung

Der bereitgestellte Go-Code zielt darauf ab, mehrere Befehle nacheinander auszuführen, jeder in seinem eigene separate Shell-Instanz. Es tritt jedoch ein Problem auf, bei dem der zweite und dritte Befehl mit der Fehlermeldung fehlschlagen, dass die ausführbare Datei nicht vorhanden ist. Dies liegt daran, dass jeder Befehl in einer neuen Shell ausgeführt wird und der Kontext der vorherigen Befehle verloren geht.

Um dieses Problem zu beheben, ist es notwendig, weiterhin alle Befehle innerhalb derselben Shell-Instanz auszuführen. Dies kann durch den folgenden Ansatz erreicht werden:

// Run multiple commands in the same shell instance
func runCommands(commands []string) error {
    // Create a pipe for controlling the shell's standard input and output
    reader, writer, err := os.Pipe()
    if err != nil {
        return err
    }
    defer reader.Close()
    defer writer.Close()

    // Start the shell command
    cmd := exec.Command("/bin/sh")
    cmd.Stdin = reader
    cmd.Stdout = writer

    // Start the command and wait for it to finish
    if err := cmd.Start(); err != nil {
        return err
    }
    if err := cmd.Wait(); err != nil {
        return err
    }

    // Write each command to the shell's standard input
    for _, command := range commands {
        if _, err := writer.Write([]byte(command + "\n")); err != nil {
            return err
        }
    }

    // Close the pipe to signal the end of input
    if err := writer.Close(); err != nil {
        return err
    }

    // Read the output from the shell command
    output, err := ioutil.ReadAll(reader)
    if err != nil {
        return err
    }

    // Return the output
    return nil
}

Diese Funktion nimmt einen Befehlsausschnitt als Eingabe und führt sie nacheinander innerhalb einer einzelnen Shell-Instanz aus. Es leitet die Befehle an die Standardeingabe der Shell weiter und liest dann deren Ausgabe.

Mit diesem Ansatz werden die nachfolgenden Befehle im selben Arbeitsverzeichnis wie die vorherigen Befehle ausgeführt und das zuvor aufgetretene Problem wird behoben .

Das obige ist der detaillierte Inhalt vonWie führe ich in Go mehrere Befehle nacheinander in einer einzelnen Shell-Instanz aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn