同じシェルで複数のコマンドを連続して実行する: 分析と解決策
提供された Go コードは、複数のコマンドをそれぞれのシェル内で連続して実行することを目的としています。独自の別個のシェル インスタンス。ただし、2 番目と 3 番目のコマンドが失敗し、実行可能ファイルが存在しないことを示すエラーが発生するという問題が発生します。これは、各コマンドが新しいシェルで実行され、前のコマンドのコンテキストが失われるためです。
この問題を解決するには、同じシェル インスタンス内ですべてのコマンドを実行し続ける必要があります。これは、次のアプローチを使用して実現できます。
// 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 }
この関数は、コマンドのスライスを入力として受け取り、単一のシェル インスタンス内でそれらを順番に実行します。コマンドをシェルの標準入力にパイプし、その出力を読み取ります。
このアプローチを使用すると、後続のコマンドは前のコマンドと同じ作業ディレクトリで実行され、前に発生した問題は解決されます。 .
以上がGo の単一シェル インスタンスで複数のコマンドを連続して実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。