我有一个小的shell应用程序,它嵌入了Tcl来执行一些Tcl代码.使用Tcl_CreateInterp初始化Tcl解释器.一切都很简单:
但是如果用户键入'exit',这是一个有效的Tcl命令,整个事情--Tcl解释器和我的shell应用程序 - 会自动退出.
问:有什么方法可以捕获来自Tcl解释器的退出信号.我真的不想检查每个用户命令.我尝试了Tcl_CreateExitHandler,但它没有用.
非常感谢.
摆脱命令
rename exit ""
Run Code Online (Sandbox Code Playgroud)
或者重新定义它以让用户知道它被禁用:
proc exit {args} { error "The exit command is not available in this context" }
Run Code Online (Sandbox Code Playgroud)
另外值得考虑的是在安全的interp中而不是在主shell中运行用户的代码.这样做可以让您准确控制用户有权访问的内容.
您也可以创建子interp(非安全),并且只禁用该interp的exit命令.
最后,如果您只是试图避免用户错误地输入它,您可以将exit重命名为其他内容:
namespace eval ::hidden {}
rename exit ::hidden::exit
Run Code Online (Sandbox Code Playgroud)