"<<<" 인수가 제공되면 내 프로그램이 계속 실행되는 이유는 무엇입니까?

"<<<" 인수가 제공되면 내 프로그램이 계속 실행되는 이유는 무엇입니까?

나는 일반적으로 stdin(수동 키보드 입력)을 통해 상호 작용하는 컴파일된 COTS 프로그램(.exe)을 가지고 있습니다. 대신 문자열을 통한 입력 제공을 사용해 보았습니다 <<<.

보통 저는 이 프로그램을 호출합니다...

./program.exe

그런 다음 원하는 옵션을 제공하면(이 경우 "G"를 누름) 일부 작업을 수행하고 화면에 일부 텍스트를 출력합니다.

다음을 사용하여 스크립트에서 "G" 옵션을 제공하려고 했습니다.

./program.exe<<<G

그런데 프로그램이 한 번이 아닌 "G" 옵션을 사용하여 계속해서 실행되는 것 같습니다. 출력이 화면에 가득 차서 강제 종료할 때까지 터미널을 사용할 수 없게 됩니다. 문자열이 지속적으로 전송 됩니까 <<<? 문제는 프로그램이 표준 입력에서 읽을 것으로 예상하고 이를 처리하도록 설계되지 않았다는 것입니다 <<<....하지만 확실하지 않습니다. 이 작업을 수행할 수 있는 방법이 있나요?

답변1

<<<"문자열을 지속적으로 전송"하지 않습니다. 문자열을 한 번만 보냅니다. 보다 정확하게는 문자열을 포함하는 임시 파일을 생성하고 프로그램의 표준 입력에서 엽니다.

이 프로그램에 문제가 있는 것 같습니다. 프로그램이 끝에 도달하면 입력 스트림을 되감습니다.

이 오류를 해결하려면 임시 파일 대신 파이프를 사용하여 입력을 보내십시오. 파이프는 되감을 수 없으므로 이 특정 오류는 발생하지 않습니다.

echo G | ./program.exe

파이프를 사용하면 다른 오류가 발생할 수 있습니다. 일부 프로그램은 입력이 터미널에서 나오지 않으면 실제로 제대로 실행되지 않습니다. 배관이 작동하지 않으면 다음 단계는예상되는실제 터미널을 사용하여 프로그램을 실행합니다(사용자 상호 작용 없음: 관리 상호 작용 예상). Expect를 사용하면 터미널에서 주고받는 내용과 시기를 제어할 수 있습니다. 다음은 G Enter프로그램이 시작되자마자 입력을 시뮬레이션하는 예상 스크립트입니다.

#!/usr/bin/expect -f
spawn ./program.exe
send "G\r"

관련 정보