기대 스크립트에서 입력 버퍼를 어떻게 플러시 할 수 있습니까?
문제
나는 기대 스크립트를 작성하고 있으며 쉘 프롬프트 (Linux)를 다루는 데 어려움이 있습니다. 내 기대 대본 스폰 rlogin
원격 시스템이 사용 중입니다 ksh
. 원격 시스템의 프롬프트에는 현재 디렉토리와 " > "
(공간보다 큰 공간). 스크립트 스 니펫은 다음과 같습니다.
send "some command here\r"
expect " > "
이것은 간단한 명령에 효과적이지만, 내가 보내는 명령이 터미널의 너비를 초과 할 때 상황이 잘못되기 시작합니다 (또는 더 정확하게 ksh
터미널의 너비라고 생각합니다). 이 경우 ksh
대화식 명령 줄의 이상한 가로 스크롤을 수행하는데,이 명령은 프롬프트를 다시 작성하고 출력에 추가 ">"를 고착시키는 것처럼 보입니다. 당연히 이것은 명령을 실행 한 후 출력에 하나 이상의 프롬프트가있는 것처럼 보일 때 기대 스크립트가 혼란스러워지고 동기화되지 않게합니다 (내 스크립트가 여러 개가 포함되어 있습니다. send
/expect
한 쌍).
나는 변화를 시도했다 PS1
원격 시스템에서 "프롬프트>"와 같은 더 독특한 것들로 비슷한 문제가 발생하여 이것을 해결하는 올바른 방법이 아닙니다.
내가 생각하는 것은 스크립트가 "이 시점에서 원격 시스템과 적절하게 동기화되어 입력 버퍼를 플러시한다는 것을 알 수 있다는 것을 알 수 있습니다." 그만큼 expect
성명서가 있습니다 -notransfer
깃발 그렇지 않습니다 패턴이 일치하는 경우에도 입력 버퍼를 폐기하므로 반대가 필요하다고 생각합니다.
원격 쉘을보다 예측할 수있게하기 위해 사용할 수있는 다른 유용한 기술이 있습니까? 나는 기대가 많은 일을 통해 스폰 된 세션이 나타납니다 원격 시스템과 대화식이지만, 더 성가신 대화식 기능 중 일부 (예 : 수평 스크롤) ksh
) 꺼집니다.
해결책
지금까지 모든 출력이 보았던 모든 출력을 버리고 싶다면 시도해보십시오.
expect -re $
이것은 $의 Regexp 일치로 입력 버퍼의 끝을 의미하므로 지금까지받은 모든 것을 건너 뛸 수 있습니다. 자세한 내용 남자 페이지를 기대하십시오.
다른 팁
"세트 -o 멀티 린"또는 열 = 10000000 (또는 다른 적절한 큰 값)을 시도 할 수 있습니다.
나는 KSH에 어려움을 겪었고 과거에는 기대했습니다. 내 해결책은 로그인 쉘에 KSH 이외의 것을 사용하는 것이 었습니다.
원격 로그인을 KSH 이외의 다른로 변경할 수 있다면 (CHSH 명령 또는 편집 /etc /passwd를 사용) /bin /sh를 쉘로 시도 할 수 있습니다.
또 다른 대안은 KSH에게 터미널이 멍청한 터미널이라고 말하는 것입니다. 특별 처리를 수행하지 못하게합니다.
$ export TERM=""
트릭을 할 수 있습니다.