我正在尝试使用现在古老的tkdiff工具,但遇到了麻烦。我有2个Linux系统。第一个系统是Redhat 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)

我不知道为什么它没有在“:”和“执行时”之间给我一条错误消息...非常奇怪。

我在这上面scratch头,我尝试了一些事情,例如:
  • !#/bin/sh shebang替换为#!/usr/bin/wish
  • package require Tk语句更新为8.5
  • 运行心愿,然后从心愿中采购tkdiff:奇怪的是,这没有错误!但这是不切实际的,因为指定diff文件并以这种方式运行非常麻烦。

  • 我猜我可能在CentOS服务器上缺少其他依赖项吗?

    更新:

    好的,这绝对是一个依赖项。我对细节有些迷惑,但是我记得从wish提示符进行采购与仅运行脚本(在错误处理方面)存在一些细微的差异。如实验所示,根目录似乎缺少字体依赖性:
    $ wish
    % font actual system
    % puts $errorInfo
    
        while executing
    "font actual system"
    % puts $errorCode
    NONE
    %
    

    显然,对font actual system不满意。奇怪的是,$errorCodeNONE。 libXft和fontconfig软件包先前已安装。我刚刚安装了以下其他yum软件包:
    xorg-x11-utils
    libXv
    libXxf86dga
    libdmx
    tk-devel (which installed fontconfig-devel and a bunch of other dependancies)
    tcl-devel
    

    最佳答案

    TL; DR: X显示服务器(本地RHEL工作站)上的系统字体未安装在运行希望的X客户端(CentOS服务器)上。

    我认为问题至少部分是由于我在CentOS服务器上运行tkdiff程序并通过X显示到我的原始RedHat工作站。我对根本原因(while executing "font actual system")的tcl堆栈进行了跟踪,并使用它来缩小问题的范围。在RedHat恶化时,我启动了wish并执行了该命令以得到以下响应:

    RedHat>$ wish
    % font actual system
    -family {DejaVu Sans} -size 12 -weight normal -slant roman -underline 0 -overstrike 0
    %
    

    我认为CentOS服务器由于正在X上显示到我的RHEL框中,因此将尝试使用相同的系统字体。快速搜索未找到适合该字体的yum软件包,因此我安装了它。
    sudo yum install dejavu-sans-mono-fonts
    

    瞧!在CentOS上,我现在得到:
    CentOS>$ wish
    % font actual system
    -family {DejaVu Sans Mono} -size 12 -weight normal -slant roman -underline 0 -overstrike 0
    %
    

    最终测试:tkdiff现在可以正常运行了!

    10-06 04:10