Articles of TCL

使用外部redis服务器来testingtcl脚本

我正在运行Ubuntu 11.10。 我正在尝试使用外部Redis服务器运行TCLtesting脚本。 使用以下内容: sb@sb-laptop:~/Redis/redis$ tclsh tests/test_helper.tcl –host 192.168.1.130 –port 6379 获取以下错误: Testing unit/type/list [exception]: Executing test client: couldn't open socket: connection refused. couldn't open socket: connection refused while executing "socket $server $port" (procedure "redis" line 2) invoked from within "redis $::host $::port" (procedure "start_server" line 9) invoked from within "start_server {tags {"protocol"}} { test […]

如何在Tcl中安装软件包?

我试图在我的机器上安装critlib ( http://equi4.com/critlib/ ),以便我可以在Tcl中dynamic创buildzip文件。 问题是我不知道如何安装Tcl包。 有没有一个地方你把文件夹? 有没有像我可以使用的yum的命令? 我已经浏览了各种Tcl初学者指南并阅读关于软件包的章节,但是每个源代码似乎总是假设我缺乏的知识。

当符号链接后面跟着`..`时,和realpath($ path)之间的行为差​​异

我发现Tcl的[file normalize $path]和C调用的pathparsingopen()如open()和realpath()之间的行为有所不同。 它围绕使用符号链接紧接着.. 设置:给定此目录结构(请注意, sidedir_link是到不同目录的链接): /tmp/fileA.txt /tmp/sidedir/fileA.txt /tmp/subdir/fileA.txt /tmp/subdir/sidedir_link -> /tmp/sidedir 当前目录是/tmp/subdir ,并且我创build了命令utils::realpath来作为对<stdlib.h>的C函数realpath()的Tcl调用。 这是成绩单。 前两个调用显示了如何解决一个符号链接。 最后两个显示了在处理紧跟在符号链接之后的行为上的差异。 wish% file normalize sidedir_link/fileA.txt /tmp/sidedir/fileA.txt wish% ::utils::realpath sidedir_link/fileA.txt /tmp/sidedir/fileA.txt wish% file normalize sidedir_link/../fileA.txt /tmp/subdir/fileA.txt wish% ::utils::realpath sidedir_link/../fileA.txt /tmp/fileA.txt 注意:不同的是/tmp/subdir/fileA.txt与/tmp/subdir/fileA.txt 。 具体来说, [file normalize $path]似乎词法parsing..通过删除path的前面部分,而C调用实际上解决了符号链接, 然后应用.. 如果符号链接是/some/location/far/far/away ,parsing的path将是/some/location/far/far/fileA.txt 。 我在Tcl文档,wiki或bug跟踪系统中找不到任何提及。 那么,这是一个Tcl错误? 一个C库的错误? 预期的行为? 我正在使用Tcl 8.4.9和Redhat 6(是的,有点落伍了…) 注意:我可以在Tcl 8.6.1中重现相同的行为 这很重要的原因是Tcl […]

由于版本号不正确,git gui无法启动

我正在运行一个古老的Ubuntu,在自动更新之后, git-gui停止了工作,而是抱怨: Error in startup script: expected version number but got "1.7.0-" while executing "package vsatisfies $_git_version 1.7.0-" (file "/usr/local/libexec/git-core/git-gui" line 1) 我的“修复”是恢复/usr/lib/git-core/git-gui ,如下所示 1286c1286 < if {[package vsatisfies $_git_version 1.7.0]} { — > if {[package vsatisfies $_git_version 1.7.0-]} { 1542c1542 < if {[package vsatisfies $::_git_version 1.6.3]} { — > if {[package vsatisfies $::_git_version 1.6.3-]} […]

Linux Telnet vt100返回键发送^ M

我正在用Linux和Debian编写TCL和Expect编写Telnet自动化脚本。 在Telnet会话中或在* .tcl脚本( send "command\r" )中按回车键,甚至send "command\n"会以^ M (Ctrl + M)发送该行。 当然,远程主机将这些命令视为非法。 在连接时打开连接和mode line之前试过telnet set crlf ,但这没有任何作用。 使用Puttys GUI,我已经启用这个选项来发送一个新的行,按回车而不是^ M。 工作正常。 如何为telnetconfiguration这个选项? 帮助将不胜感激! 编辑: stty -a speed 38400 baud; rows 24; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 […]

rlwrap在后台运行时挂起作业

我有一个rlwrap的问题(请参阅这里的手册页)。 考虑这种情况: empty.tcl是一个空文件。 在这条线上 tclsh empty.tcl & 在后台运行工作并退出,所以我得到这个提示 [1]+ Done tclsh empty.tcl 。 虽然这一行 rlwrap tclsh empty.tcl & 在后台运行的工作,不退出它,所以我得到这个提示 [1]+ Stopped rlwrap tclsh empty.tcl 。 相应的作业在后台挂起。 我的问题是如何让它退出工作而不是挂起? rlwrap是一个Linux实用程序命令,它运行指定的命令,拦截用户input以提供readline的行编辑,持久化历史和完成 。 如上所述,rlwrap的主要属性是你不应该注意到命令和rlwrap命令之间的任何区别 ,但是,正如上面所描述的那样,这个属性不成立。 也许可以build议一个替代rlwrap其function如预期?

Python版本和Tcl / Tk兼容性

我已经安装了Tcl和Tk,并且正在运行一个非常熟悉的“No module named _tkinter”错误。 我的“python”Bash命令运行Python版本2.4.2,但Synaptic说我已经安装了2.6.6。 我甚至尝试安装3.0,但也失败了。 我自己configuration​​并构build了Tcl / Tk tarball,并尝试使用突触包。 “wish”和“tclsh”命令都可以工作,所以我知道这些模块已经安装好了,但是我不能让Python认出它们。 此外,我不能为我的数字生活,我应该使用哪个版本的Python,以及如何让我的Bash命令使用该版本。 我没有看到2.4.2删除的任何选项,如果我删除2.6.6,它删除了似乎是我的其他包(夸张,我知道)的大部分。 我真的不知道该从哪里出发,所以任何指导都将不胜感激。 更新: 我不得不重新安装python-tk包,2.6能够导入它。 现在我只需要弄清楚如何删除2.4,以免后来搞砸了。

执行“字体实际系统”时tkdiff空白错误信息

我正在尝试使用现在可敬的tkdiff工具,但遇到了一个麻烦。 我有2个Linux系统。 第一个系统,一个红帽EL 6.4工作站,运行tkdiff完全正常 – 我可以整天差异文件。 在第二个系统上,一个CentOS版本6.6的服务器, tkdiff失败,出现以下堆栈跟踪: Error in startup script: while executing "font actual system" invoked from within "set sysfont [font actual system]" (file "<path…>/bin/tkdiff" line 122) 我不知道为什么它没有给我之间的“:”和“执行”之间的错误信息…非常奇怪。 我在这个问题上摸不着头脑,我尝试了一些东西,比如: 用#!/usr/bin/wishreplace!#/bin/sh shebang 更新package require Tk语句到8.5 运行的愿望,然后从内心采购tkdiff:好奇, 这没有任何错误! 但这是不实际的,因为指定diff文件并以这种方式运行会非常麻烦。 我猜我可能会错过我的CentOS服务器上的其他依赖项? 更新: 好的,这绝对是一个依赖性的东西。 我的大脑在细节上有点模糊,但是我记得在从wish提示中获取资源时只是在运行脚本时存在一些细微差别,至于error handling。 根似乎可能是缺less的字体依赖,因为这个实验显示: $ wish % font actual system % puts $errorInfo while […]

期望带有引号的rsync脚本

我想rsync一个文件夹到另一台机器。 sshpass不是一个选项,证书也不是。 所以我坚持期待。 到目前为止,我有这个bash脚本(最小化)。 read -p "Enter remote IP: " IP read -p "Enter remote user: " USER read -s -p "Enter remote password: " PASSWORD expect <<EOF set timeout -1 spawn rsync -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \ -aHv –exclude=".*/" –delete ../.. ${USER}@${IP}:~/destination expect "password: " send "${PASSWORD}\n" expect eof EOF 问题是,rsync不尊重“–exclude”选项。 在标准输出中,我看到: […]

在大括号之后的额外字符

在Linux上运行的相同的代码在FreeBSD上不起作用 在Linux上 % set timeZone "-4:0" -4:0 % set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]] -0400 % puts $tcl_version 8.5 在FreeBSD上 % set timeZone "-4:0" -4:0 % set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]] extra characters after close-brace % puts $tcl_version 8.4 如何在FreeBSD和Linux上进行这项工作?