sh 스크립트로 래핑된 Java 프로그램을 사용하여 이진 응답 파일을 생성하는 프로세스를 자동화하려고 합니다(이것은 많은 문제가 있지만 내 코드에는 없습니다). 내가 원하는 결과를 얻으려면 sh 스크립트를 실행할 때 첫 번째 프롬프트에서 [enter]를 누르고 두 번째 프롬프트에서 "Y" [enter]를 눌러야 합니다.
Linux 상자에서 작동하도록 다음 코드를 사용했습니다.
echo Y > ans; ./script < ans `echo -e \\\r`
다른 Linux 상자에서는 작동하지 않습니다(내 코드가 아니라 스크립트가 다시 무한 루프에 들어갑니다). 두 시스템 모두 동일한 커널과 버전을 실행하고 있습니다.
나는 이것을 수행하는 더 우아하고 직접적인 방법이 있다고 확신합니다. 그러나 일관되게 작동하려면 필요합니다. 나는 이것이 상자 중 하나가 설정되는 방식이 아니라고 생각합니다.
답변1
간단한 expect
스크립트를 사용해 보세요.
#!/usr/bin/기대 시간 초과 설정 20 /path/to/your/java/shell/script/thing.sh 생성 "첫 번째 프롬프트:" {"\r" 전송}이 필요합니다. "두 번째 프롬프트:" {"Y" 보내기}가 필요합니다. 서로 영향을 미치다
... FirstPrompt
첫 번째 프롬프트의 텍스트는 어디에 있습니까(따라서 쉘 스크립트에서 "Enter를 누르세요"라는 프롬프트가 표시되면 그대로 프롬프트가 필요합니다. 예제 스크립트에 "FirstPrompt:"를 썼습니다 expect
). SecondPrompt는 두 가지 팁, 단어에 대한 단어입니다. 단어.
...또한 귀하의 시스템 expect
에 설치되어 있다고 가정합니다 . /usr/bin/expect
그렇지 않은 경우 설치하고 올바른 경로를 사용하십시오.