如何阻止tclsh执行'as'命令时启动外部程序并解决无响应问题
阻止tclsh中'as'命令启动外部程序的方法
在tclsh中输入as命令会触发外部程序导致无响应,执行日志如下:
mytcl % as ^C child killed: interrupt while evaluating as mytcl %
方法一:直接覆盖as命令
在tclsh中定义同名的过程,覆盖默认的外部命令调用逻辑:
proc as {} { puts "as 命令已被禁用" }
执行上述代码后,再输入as就会运行自定义的过程,不会启动外部程序。
方法二:全局禁用未知命令的外部调用
tcl对未定义的命令会通过unknown过程处理,默认行为是尝试调用同名外部程序。重写该过程即可彻底阻止所有未定义命令触发外部执行:
proc unknown {args} { puts "命令 \"$args\" 未定义,且已禁用外部程序调用" }
让设置永久生效
如果希望每次启动tclsh都自动应用这些限制,可将代码添加到tcl的启动脚本:
- Linux/macOS:写入
~/.tclshrc文件 - Windows:写入
%USERPROFILE%/.tclshrc或tcl安装目录下的init.tcl文件
内容的提问来源于stack exchange,提问作者piper
相关产品推荐
相关产品推荐

