동일한 셸에서 여러 명령을 순차적으로 실행: 분석 및 솔루션
제공된 Go 코드는 여러 명령을 순차적으로 실행하는 것을 목표로 합니다. 자신의 별도 쉘 인스턴스. 그러나 실행 파일이 존재하지 않는다는 오류와 함께 두 번째 및 세 번째 명령이 실패하는 문제가 발생합니다. 이는 각 명령이 새 셸에서 실행되어 이전 명령의 컨텍스트가 손실되기 때문입니다.
이 문제를 해결하려면 동일한 셸 인스턴스 내에서 모든 명령을 계속 실행해야 합니다. 이는 다음 접근 방식을 사용하여 달성할 수 있습니다.
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!