Tôi đang viết một tập lệnh Mong đợi và gặp sự cố khi xử lý dấu nhắc trình bao (trên Linux). Tập lệnh Kỳ vọng của tôi sinh ra rlogin
và hệ thống từ xa đang sử dụng ksh
. Lời nhắc trên hệ thống từ xa chứa thư mục hiện tại theo sau là " > "
(khoảng cách lớn hơn không gian). Một đoạn kịch bản có thể là:Làm cách nào để xóa bộ đệm đầu vào trong tập lệnh mong muốn?
send "some command here\r"
expect " > "
này hoạt động cho các lệnh đơn giản, nhưng mọi thứ bắt đầu đi sai khi lệnh tôi gửi vượt quá chiều rộng của nhà ga (hay chính xác hơn, những gì ksh
nghĩ là chiều rộng của thiết bị đầu cuối). Trong trường hợp đó, ksh
thực hiện một số cuộn ngang kỳ lạ của dòng lệnh tương tác, có vẻ như viết lại dấu nhắc và gắn thêm ">" vào đầu ra. Đương nhiên điều này khiến cho tập lệnh Expect bị nhầm lẫn và không đồng bộ khi xuất hiện nhiều dấu nhắc trong đầu ra sau khi thực hiện lệnh (tập lệnh của tôi chứa một số cặp send
/expect
).
Tôi đã thử thay đổi PS1
trên hệ thống từ xa thành một cái gì đó đặc biệt hơn như "prompt>" nhưng một vấn đề tương tự phát sinh cho tôi biết đó không phải là cách phù hợp để giải quyết vấn đề này.
Những gì tôi nghĩ có thể giúp là khả năng kịch bản cho biết Mong đợi rằng "Tôi biết tôi đã đồng bộ hóa đúng với hệ thống từ xa tại thời điểm này, vì vậy hãy xóa bộ đệm đầu vào ngay bây giờ." Câu lệnh expect
có cờ -notransfer
mà không loại bỏ bộ đệm đầu vào ngay cả khi mẫu phù hợp, vì vậy tôi nghĩ rằng tôi cần điều ngược lại.
Có bất kỳ kỹ thuật hữu ích nào khác mà tôi có thể sử dụng để làm cho vỏ từ xa hoạt động tốt hơn dự đoán được không? Tôi hiểu rằng Mong đợi trải qua rất nhiều công việc để đảm bảo rằng phiên được sinh ra xuất hiện tương tác với hệ thống từ xa, nhưng tôi muốn một số tính năng tương tác gây phiền nhiễu hơn (chẳng hạn như cuộn ngang ksh
) bị tắt.
Tuyệt vời, dường như chỉ là những gì tôi cần. –