ホームページ > バックエンド開発 > Golang > Go の単一シェル インスタンスで複数のコマンドを連続して実行するにはどうすればよいですか?

Go の単一シェル インスタンスで複数のコマンドを連続して実行するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-25 05:35:14
オリジナル
728 人が閲覧しました

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

同じシェルで複数のコマンドを連続して実行する: 分析と解決策

提供された 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート