进程管理与通信的实用技巧
1. 密码验证与终端参数保存
在进行密码验证时,可使用如下代码:
expect_user -re "(.*)\n"
send_user "\n"
if {0 !=[string compare $passwd $expect_out(1,string)]} {
send_user "mistyped password?"
exit
}
此代码会将用户输入的密码与预设密码进行对比,若不匹配则提示可能输错密码并退出。同时,还可以选择向用户展示刚刚输入的密码,只要用户能够拒绝该展示请求或者能在私密环境下查看,就不会存在安全风险。
使用 disconnect 命令相较于 shell 异步进程特性( & )有一个优势,即 Expect 能在断开连接前保存终端参数。当在前台启动时,Expect 会自动保存控制终端的参数,这些参数后续会在 spawn 创建新进程及其控制终端时被使用。而当异步启动(使用 & )时,由于在 Expect 获得控制权时终端已断开连接,它便没有机会读取终端参数,此时终端只能通过 stty sane 进行初始化,这会丢失诸如行和列数量等信息。
2. 断开进程的调试
调试断开的进程颇具挑战,因为 Expect 的调试器在断开的程序中无法工作,原因是调试器从标准输入读取信息,而在断开的进程中标准输入是关闭的。对于简单问题,可将日志或诊
超级会员免费看
订阅专栏 解锁全文
1486

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



