Expect를 사용하여 SSH 세션 및 ERP 프로그램과 자동으로 상호 작용합니다.Expect - 행 및 열을 기반으로 화면 영역에서 변수 가져 오기
내 기대 스크립트에서 변수를 포착하기보다는 표 영역 (예 : 한 필드)을 코드의 변수에 캡처하는 특정 키 입력을 받으면 가능합니까? 서버에 다른 명령을 보내고 필드를 다시 보내시겠습니까?
내 6 자리 주문 번호가 포함 된 주문 번호가 6, 12, 6, 18 (6은 행, 12-18은 열임)에 포함되어 있다고 가정 해보십시오. 나는 행 6 열 12에서 18로 그 주문 번호를 변수에 복사하고 싶다. 그런 다음 사용자가 좀 더 상호 작용할 수있게하거나 다른 메뉴로 이동할 것을 기대하고 다른 메뉴에서 주문 번호를 다시 보냅니다.
제 질문은 다음과 같습니다. 현재 화면의 내용이 하나의 버퍼에 있습니까? (전체 세션이 아님) 화면의 해당 행과 열 범위에만 존재하는 특정 데이터 요소 만 추출 할 수 있습니까?
샘플 의사 코드 :
#!/usr/bin/expect -f
set env(TERM) vt100
spawn ssh -Y [email protected]
#... set user/pass and other vars...
#... send commands to log into ERP
#don't time out
set timeout -1
interact {
-reset $CTRLZ {exec kill -STOP [pid]}
$CTRLA {
exp_send "menu_address\ry\r"
}
$CTRLO {
#...acquire order number variable...
#...some code I don't understand yet...
exp_send "menu_exit_sequence\r"
exp_send "menu_address\r"
exp_send $ordernumvar
}
~~
}
이러한 특수 이스케이프 시퀀스 중 하나의 예는 무엇입니까? tty 기반 응용 프로그램이 제대로 표시되는 방식에 다소 익숙합니다. 또한 화면에 이미있는 경우 내 필드를 '예상'할 수 있으며 그 후에 만 사용자가 변수 복사 작업을 실행합니까? 그 메뉴에 대한 유용한 데이터 요소를 미리 결정하고 나중에 사용할 수 있도록 변수에 미리로드하는 것이 불가능하지 않을 것입니다. – jjclarkson
흥미 롭습니다 ... 스크립트에서 작업하고있는 시나리오의 경우 SSH 세션을 생성합니다 (ERP 프로그램은 쉘 설정에 따라 로그인 할 때 자동으로 시작되지만 로그인 시퀀스도 스크립트에 의해 자동화 됨). 사용자가 '상호 작용'을 사용하지만 Ctrl + o (및 기타 여러 가지)와 같은 특정 키 입력은 자동화 된 절차를 트리거 한 다음 사용자에게 다시 제어 할 수 있습니다. 커서 제어는 특정 필드의 선택 및 특정 명령의 전송 만 필요하지 않습니다. – jjclarkson