我有一种明显的感觉,我错过了一些东西,但到目前为止我的搜索没有结果。
我正在尝试使用 tcl/expect 脚本来启动 tclsh 交互式 shell,添加一个用于轻松重新加载实用程序以进行测试的过程,然后将正常控制权返回给我。
到目前为止,我发现使 tcl 交互式 shell“可用”的一种方法是用“rlwrap”启动它,这样我就可以使用箭头键等。
所以我尝试了下面的脚本,当交互命令被点击时,关于 rlwrap 的一些事情导致以前的输出被转储到标准输出。
我能做些什么来避免这种情况发生吗?
代码:
package require Expect
puts "Tcl version : [info tclversion]"
puts "Expect version: [exp_version]"
log_user 0
spawn -noecho rlwrap tclsh
# Create procedure to easily reload utilites after changes have been made
expect "% "
send {
proc reload {} {
# Procedure to reload utility source easily for testing
}
}
# Source utilities
expect "% "
send "reload\r"
send_user "\nUse 'reload' procedure to re-source utility files\n\n"
log_user 1
interact
输出:
Tcl version : 8.4
Expect version: 5.43.0
Use 'reload' procedure to re-source utility files
proc reload {} {
# Procedure to reload utility source easily for testing
}
% reload
%
你可以因为某种原因它呼应 proc 定义和重新加载命令的输入。一旦发生交互,就会发生这种情况。如果我用“退出”替换交互,我看不到任何输出。
当然,我希望看到的输出是这样的:
Tcl version : 8.4
Expect version: 5.43.0
Use 'reload' procedure to re-source utility files
%