2016-12-16 2 views
0

나는 질문이의 키 누름 시뮬레이션, 임 루프에서 anpther 이진 파일을 시작하는 매우 간단한 스크립트를 가지고 그것을이 맘에 looka : 이제bash는

for ((i=0; \\$i <= 5; i++)) ; do 
test.sh 
done 

을 문제입니다 각 실행 test.sh이 경우에 저를 요구 한 후 로그를 무시하고 싶습니다. "[Y/n]을 덮어 쓰시겠습니까?"

그런 다음 프롬프트가 스크립트를 일시 중지하고 Y를 수동으로 누를 때까지 반복이 중지되고 다른 프롬프트가 나타날 때까지 계속됩니다.

"Y"버튼을 눌러 시뮬레이션 할 수 있습니까?

+0

'기대'는 사용자가 필요로하는 것과 정확히 일치합니다. – Aserre

+1

아마도 '예'이면 충분합니다. 'yes Y'는'test.sh'의 표준 입력으로 파이프 할 수있는'Y'의 무한한 스트림을 생성합니다. – Aaron

+0

@Aaron, 답변을 게시 하시겠습니까? –

답변

2

을 나는 당신의 test.sh 스크립트가 다른 목적을 위해 표준 입력을 사용하지 않는 경우 충분한 수 있습니다 yes를 사용하여 생각 : yes이 라인의 무한 스트림을 생성합니다 기본값으로 y이거나 다른 문자열을 매개 변수로 전달합니다. test.sh은 사용자 입력을 확인할 때마다 해당 입력 행을 소비하고 해당 작업을 수행해야합니다. yes Y를 사용

, 당신이 이제까지 필요합니다보다 Y 이상으로 test.sh 스크립트를 제공 할 수있다 :

yes Y | test.sh 

는 루프와 함께 사용하려면보다 오히려 루프의 표준 입력에 파이프를뿐만 아니라 수도 test.sh 호출 :

yes Y | for ((i=0; i <= 5; i++)) ; do 
test.sh 
done 
2

다음 코드 조각처럼 뭔가 작업을해야합니다 :

for ((i=0; i <= 5; i++)) 
#heredoc. the '-' is needed to take tabulations into acount (for readability sake) 
#we begin our expect bloc 
do /bin/usr/expect <<-EOD 
    #process we monitor 
    spawn test.sh 
    #when the monitored process displays the string "[Y/n]" ... 
    expect "[Y/n]" 
    #... we send it the string "y" followed by the enter key ("\r") 
    send "y\r" 
#we exit our expect block 
EOD 
done