深入探究数据发送:从基本原理到高级技巧
1. 熟模式下的字符发送限制
在熟模式(cooked mode)下,字符发送存在一些限制。一方面,若不是专门测试进程对信号的反应,向其发送某些特殊字符是没有意义的。例如,当进程停止时,它会保持停止状态,直到收到继续信号。而且,Expect脚本进行作业控制时,只需更改 spawn_id 或使用 -i 标志,无需暂停进程。
另一方面,设备驱动本身也存在限制。在熟模式下,大多数UNIX系统不允许连续发送超过256个字符而不换行,部分系统最多允许1000个字符,但总归是有限制的,且这个限制往往低得令人意外。即便在窗口系统中,若将大量文本粘贴到shell窗口,shell可能会出现锁定、发出蜂鸣声或其他异常行为。
需要注意的是,不要将这些限制与可传递给shell的命令长度混淆。旧系统中,该限制通常为10K,而现代系统则可达1MB甚至更多。此限制源于内核,适用于任何程序调用的参数(包括Expect中的 spawn 和 exec 命令)。而熟模式的限制是由终端驱动导致的,仅在交互式使用时出现。
为避免这些限制,编写脚本时应模拟人类操作程序的方式,即发送一个命令,读取一个响应,再发送一个命令,再读取一个响应,除非真实用户会一次性发送多个命令,否则不要这么做。以下是一个测试系统可输入字符数量的脚本:
spawn /bin/sh
expect "\\$ " ;# match literal $ in shell prompt
fo
超级会员免费看
订阅专栏 解锁全文
2144

被折叠的 条评论
为什么被折叠?



