Đây là lệnh autoexpect có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi, chẳng hạn như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
autoexpect - tạo tập lệnh Expect từ việc xem một phiên
SYNOPSIS
tự động [ args. ] [ chương trình args ... ]
GIỚI THIỆU
autoexpect xem bạn tương tác với chương trình khác và tạo tập lệnh Expect
tái tạo các tương tác của bạn. Đối với các tập lệnh đường thẳng, tính năng autoexpect giúp tiết kiệm đáng kể thời gian
viết kịch bản bằng tay. Ngay cả khi bạn là một chuyên gia về Expect, bạn sẽ thấy
thuận tiện khi sử dụng autoexpect để tự động hóa các phần tương tác không cần quan tâm hơn. Nó là
dễ dàng hơn nhiều để cắt / dán nhiều tập lệnh autoexpect với nhau hơn là viết chúng từ
vết trầy. Và nếu bạn là người mới bắt đầu, bạn có thể không học được gì cả
nhiều hơn về Expect hơn là cách gọi autoexpect.
Cách đơn giản nhất để sử dụng autoexpect là gọi nó từ dòng lệnh không có đối số.
Ví dụ:
% tự động mong đợi
Theo mặc định, autoexpect tạo ra một trình bao cho bạn. Cho một tên chương trình và các đối số,
autoexpect sinh ra chương trình đó. Ví dụ:
% tự động mong đợi ftp ftp.cme.nist.gov
Sau khi chương trình sinh sản của bạn đang chạy, hãy tương tác bình thường. Khi bạn đã thoát khỏi trình bao
(hoặc chương trình mà bạn đã chỉ định), autoexpect sẽ tạo một tập lệnh mới cho bạn. Theo mặc định,
autoexpect ghi tập lệnh mới vào "script.exp". Bạn có thể ghi đè điều này bằng cờ -f
theo sau là một tên tập lệnh mới.
Ví dụ sau chạy "ftp ftp.cme.nist.gov" và lưu trữ tập lệnh Expect kết quả
trong tệp "nist".
% tự động mong đợi -f nist ftp ftp.cme.nist.gov
Điều quan trọng là phải hiểu rằng autoexpect không đảm bảo một tập lệnh hoạt động vì
nó nhất thiết phải đoán về những thứ nhất định - và đôi khi nó đoán sai.
Tuy nhiên, nó thường rất dễ dàng để xác định và khắc phục những sự cố này. Những vấn đề điển hình
là:
· Thời gian. Một số lượng lớn đáng ngạc nhiên các chương trình (rn, ksh, zsh, telnet, v.v.)
và các thiết bị (ví dụ: modem) bỏ qua các lần nhấn phím đến "quá nhanh" sau
lời nhắc. Nếu bạn thấy tập lệnh mới của mình bị treo ở một chỗ, hãy thử thêm
ngủ ngắn ngay trước khi gửi trước.
Bạn có thể buộc hành vi này xuyên suốt bằng cách ghi đè biến
"force_conservative" ở gần phần đầu của tập lệnh đã tạo. Cái này
chế độ "bảo thủ" làm cho tự động chờ đợi tự động tạm dừng trong thời gian ngắn (một phần mười của
một giây) trước khi gửi từng ký tự. Điều này làm ổn định mọi chương trình mà tôi biết
của.
Chế độ thận trọng này rất hữu ích nếu bạn chỉ muốn nhanh chóng trấn an bản thân
rằng vấn đề là thời gian (hoặc nếu bạn thực sự không quan tâm đến tốc độ
tập lệnh chạy). Chế độ tương tự này có thể được bắt buộc trước khi tạo tập lệnh bằng cách
sử dụng cờ -c.
May mắn thay, những điểm thời gian này rất hiếm. Ví dụ, telnet bỏ qua
ký tự chỉ sau khi nhập chuỗi thoát của nó. Modem chỉ bỏ qua
ký tự ngay sau khi kết nối với chúng lần đầu tiên. Một vài
các chương trình luôn thể hiện hành vi này nhưng thường có chuyển sang
vô hiệu hóa nó. Ví dụ, cờ -T của rn vô hiệu hóa hành vi này.
Ví dụ sau bắt đầu tính năng tự động theo dõi ở chế độ thận trọng.
tự động mong đợi -c
Cờ -C xác định một khóa để chuyển đổi chế độ bảo thủ. Ví dụ sau
bắt đầu tự động tìm kiếm (ở chế độ không bảo toàn) với ^ L làm nút chuyển. (Lưu ý rằng
^ L được nhập theo nghĩa đen - tức là nhập điều khiển thực-L).
autoexpect -C ^ L
Ví dụ sau đây bắt đầu tự động theo dõi ở chế độ thận trọng với ^ L là
chuyển đổi
autoexpect -c -C ^ L
· Tiếng vang. Nhiều ký tự echo chương trình. Ví dụ: nếu bạn nhập "more" vào một
shell, những gì autoexpect thực sự thấy là:
bạn đã gõ 'm',
máy tính đã gõ 'm',
bạn đã gõ 'o',
máy tính gõ 'o',
bạn đã gõ 'r',
máy tính gõ 'r',
hữu ích. Cảm ơn !
Nếu không có kiến thức cụ thể về chương trình, không thể biết nếu bạn
chờ xem từng ký tự được lặp lại trước khi nhập ký tự tiếp theo. Nếu autoexpect
thấy các ký tự được lặp lại, nó giả định rằng nó có thể gửi tất cả chúng thành một nhóm
thay vì xen kẽ chúng như cách chúng xuất hiện ban đầu. Điều này làm cho
kịch bản dễ đọc hơn. Tuy nhiên, nó có thể không chính xác nếu
bạn thực sự phải đợi để xem từng ký tự được vang lên.
· Thay đổi. Autoexpect ghi lại mọi ký tự từ tương tác trong tập lệnh.
Điều này là đáng mong đợi vì nó cho bạn khả năng đưa ra đánh giá về
điều gì là quan trọng và điều gì có thể được thay thế bằng một kết quả phù hợp.
Mặt khác, nếu bạn sử dụng các lệnh có đầu ra khác với việc chạy để chạy,
các tập lệnh được tạo sẽ không chính xác. Ví dụ: "ngày"
lệnh luôn tạo ra kết quả đầu ra khác nhau. Vì vậy, sử dụng lệnh ngày trong khi
chạy autoexpect là một cách chắc chắn để tạo ra một tập lệnh yêu cầu chỉnh sửa
để nó hoạt động.
Cờ -p đặt tự động chờ đợi vào "chế độ nhắc nhở". Trong chế độ này, tính năng tự động sẽ
chỉ tìm dòng cuối cùng của đầu ra chương trình - thường là
lời nhắc. Điều này xử lý vấn đề ngày tháng (xem ở trên) và hầu hết các vấn đề khác.
Ví dụ sau bắt đầu tự động tìm kiếm trong chế độ nhắc nhở.
tự động mong đợi -p
Cờ -P xác định một chìa khóa để bật tắt chế độ nhắc nhở. Ví dụ sau đây bắt đầu
autoexpect (ở chế độ không nhắc) với ^ P làm nút chuyển. Lưu ý rằng ^ P là
được nhập theo nghĩa đen - tức là nhập điều khiển-P thực.
autoexpect -P ^ P
Ví dụ sau đây bắt đầu tự động tìm kiếm trong chế độ nhắc với ^ P là nút bật / tắt.
autoexpect -p -P ^ P
KHÁC CỜ
Sản phẩm -Yên lặng cờ vô hiệu hóa các thông báo cung cấp thông tin do autoexpect tạo ra.
Sản phẩm -Q gắn cờ tên một ký tự trích dẫn có thể được sử dụng để nhập các ký tự tự động tìm kiếm
nếu không sẽ tiêu thụ bởi vì chúng được sử dụng như chuyển đổi.
Ví dụ sau đây cho thấy một số cờ có dấu ngoặc kép được sử dụng để cung cấp cách nhập
chuyển đổi theo nghĩa đen.
autoexpect -P ^ P -C ^ L -Q ^ Q
STYLE
Tôi không biết liệu có "phong cách" cho các chương trình Expect hay không nhưng chắc chắn autoexpect sẽ
không được tổ chức như bất kỳ mô hình của phong cách. Ví dụ: autoexpect sử dụng các tính năng của Expect
được dành riêng cho tập lệnh do máy tính tạo ra. Vì vậy, đừng cố gắng
viết một cách trung thực các tập lệnh xuất hiện như thể chúng được tạo bởi autoexpect. Đây không phải là
hữu ích.
Mặt khác, các tập lệnh autoexpect cho thấy một số điều đáng giá. Ví dụ, bạn
có thể thấy cách bất kỳ chuỗi nào phải được trích dẫn để sử dụng nó trong tập lệnh Tcl đơn giản bằng cách chạy
các chuỗi thông qua autoexpect.
Sử dụng autoexpect trực tuyến bằng các dịch vụ onworks.net