SSH를 통해 컴퓨터에서 일부 명령을 실행하기 위해 Expect를 사용하는 스크립트가 있습니다. 스크립트의 일부는 파일에 저장하려는 여러 페이지의 출력을 생성하는 명령을 실행합니다.
키 프롬프트도 기록하지 않고 예상 스크립트의 일부만 파일로 출력하려면 어떻게 해야 합니까?
내가 가진 것은 다음과 같습니다
expect "something"
send "command that causes multi-page output with --More-- or (q)uit options\r"
#looping through output so that all pages are shown
log_file -noappend file.log #logging should start now
expect {
-ex "--More--" {
send "\r";
exp_continue;
}
} #I want to have output of only this part of expect script
# everything since last command before loop is issued to end of loop
log_file #Logging should stop here
send "other commands"
로그 파일에 "--More-- 또는 (q)uit"를 추가하지 않고 루프 출력만 파일에 추가하려면 어떻게 해야 합니까?
또한 로그에는 log_file을 설정하기 전의 루프 전 마지막 전송과 log_file을 삭제한 후 루프 후의 첫 번째 프롬프트도 포함되어 있습니다. 이는 쉽게 삭제할 수 있으므로 큰 문제는 아닙니다.
--More-- or (q)uit^M ^M
내 주요 문제는 여기에 포함된 로그 파일입니다.
따라서 로그는 다음과 같습니다.
actual command output lines I want
...
--More-- or (q)uit^M ^M"actual command output line I want"
--More-- or (q)uit^M ^M"actual command output line I want"
로그에 "more" 및 "exit" 옵션을 추가하지 않고 루프 출력을 파일에 기록하려면 어떻게 해야 합니까?
답변1
네트워크 장치 출력의 일시 중지는 운영자가 사용하기 위한 것입니다.
자동화된 도구를 사용할 때 가장 좋은 방법은 장치가 해당 페이지를 비활성화하도록 지시하는 데 사용하는 기본 메커니즘/언어를 사용하는 것입니다.
Cisco에 관해 이야기하는 경우 이러한 설정은 시스템 전체가 아닌 세션별로 설정되므로 이 설정이 필요한 모든 스크립트의 시작 부분에 표시되어야 합니다.
Cisco 라우터/스위치를 다룰 때 나는 일반적으로 다음 명령을 보냅니다.
terminal length 0
아니면 기대치를 사용하려면
send "terminal lenght 0\r"
추신. 실제 터미널 길이 구문은 Cisco 운영 체제에 따라 다를 수 있습니다. 예를 들어 Cisco Firewall Manager 카드의 구문은 약간 다릅니다. 그러나 이 질문의 각도는 여기서 주제가 아닙니다.