Home > Article > Backend Development > How to Run Multiple Commands Sequentially in a Single Shell Instance in Go?
Run Multiple Commands Sequentially in the Same Shell: Analysis and Solution
The provided Go code aims to execute multiple commands sequentially, each in its own separate shell instance. However, it encounters an issue where the second and third commands fail with an error indicating that the executable file does not exist. This is because each command is executed in a new shell, losing the context of the preceding commands.
To resolve this issue, it is necessary to keep executing all commands within the same shell instance. This can be achieved by using the following approach:
// 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 }
This function takes a slice of commands as input and executes them in sequence within a single shell instance. It pipes the commands to the shell's standard input and then reads its output.
By using this approach, the subsequent commands will be executed in the same working directory as the preceding commands, and the issue encountered earlier will be resolved.
The above is the detailed content of How to Run Multiple Commands Sequentially in a Single Shell Instance in Go?. For more information, please follow other related articles on the PHP Chinese website!