什么tcl命令返回上次评估的命令?我认为应该有类似bash历史的东西。
我试过这个,但它打印出空字符串。
set aaa bbb
puts [history info]
我有c ++程序,它创建Tcl Interpreter并使用它来评估命令。在特定时刻,我需要知道最后评估的命令是什么。是否可以使用Tcl或C接口?
set a bbb
set b ccc
puts eee
set hh [history redo 1]
现在收到错误
event "1" hasn't occured yet
while executing
"HistIndex $event"
(procedure "tcl::HistRedo" line 6)
invoked from within
"tcl::HistRedo [lindex $args 1]"
(procedure "history" line 109)
invoked from within
"history redo 1"
invoked from within
"set hh [history redo 1]"
(file "./a.itcl" line 17)
答案 0 :(得分:3)
使用history命令在tclsh中查看和操作以前输入的命令。这使您可以查看以前的命令列表和重做事件。
在交互式tclsh中,还有一个!!
或!N
快捷方式history redo N
重做最后输入的命令或重做命令N(其中N是事件编号)。< / p>
它不受上箭头或ctrl-p或任何正常的约束。为此,您可能需要一些像rlwrap或socat READLINE
这样的包装器来进行readline样式的行编辑。如果您有一个X Windows会话,则tkcon更有用,并提供合理的命令行编辑。在Windows上,tclsh可以使用cmd.exe提示符中的构建行编辑 - 包括使用uparrow来获取以前的命令。
在我的测试环节中:
% info pa
8.5.13
% history z
bad option "z": must be add, change, clear, event, info, keep, nextid, or redo
% history info
1 info pa
2 history z
3 history info
% history redo 1
8.5.13
% exit
<强>跟进强>
原始海报的其他评论声明代码未在标准tclsh解释器中运行。历史记录功能在generic / tclHistory.c和library / history.tcl库脚本中实现。如C文件头注释中所述:
这个模块和Tcl库文件history.tcl一起实现 Tcl命令历史记录。可以调用Tcl_RecordAndEval(Obj)来记录 命令(“事件”)在执行之前。命令中定义的命令 history.tcl可用于执行历史替换。
因此我们可以推断,在评估我们想要输入到历史记录中的命令时,自定义解释器必须使用Tcl_RecordAndEval
API调用。据推测,当前的自定义实现只是使用Tcl_Eval或其中一个相关函数。