Linux Redhat 5.5 上的 tkdiff 错误

Linux Redhat 5.5 上的 tkdiff 错误

tkdiff以 root 身份安装,并且在该用户下运行良好,但是当我切换到本地用户时,出现错误:

应用程序初始化失败:在以下目录中找不到可用的 init.tcl:
/usr/local/lib/tcl8.0 /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/lib/tcl8 .0 /pune/tools/synopsys/vera/2009.12-6/tcl8.0/library /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/library

这可能意味着 Tcl 没有正确安装。

启动脚本出错:执行“package require Tk 8.0”
时找不到软件包 Tk 8.0 (文件“./tkdiff”第 32 行)

我该如何解决?

答案1

TCL/Tk的安装从哪里来?它看起来像是与 Synopsys 捆绑在一起的,特别是他们的 Vera 软件。您真的打算将他们的 TCL/Tk 版本与 tkdiff 一起使用吗?

在我看来,这是一个$PATH问题。您没有选择专tkdiff为使用而构建的正确安装,而是使用 Synopsys 提供的安装。

tkdiff 包装

我使用的是 CentOS 5.8,并且我有以下软件包,可以从提供tkdiff.

$ yum search tkdiff
Loaded plugins: fastestmirror
========================================================= Matched: tkdiff ==========================================================
tkcvs.noarch : Graphical interface to the CVS and Subversion

您可以使用以下命令确保可执行文件tkdiff实际上是此包的一部分:

$ repoquery -l tkcvs |  grep tkdiff
/usr/bin/tkdiff

该包依赖于以下其他包:

$ yum deplist tkcvs
Loaded plugins: fastestmirror
Finding dependencies: 
package: tkcvs.noarch 8.2.2-1.el5.rf
  dependency: /usr/bin/env
   provider: coreutils.x86_64 5.97-34.el5_8.1
  dependency: /bin/sh
   provider: bash.x86_64 3.2-32.el5
   provider: bash.x86_64 3.2-32.el5_9.1
  dependency: tcl
   provider: tcl.x86_64 8.4.13-6.el5
   provider: tcl.i386 8.4.13-6.el5
  dependency: tk
   provider: tk.x86_64 8.4.13-5.el5_1.1
   provider: tk.i386 8.4.13-5.el5_1.1

确认

$PATH您可以通过暂时从您的 中删除 Synopsys 软件,然后尝试在tkdiff不引用 Synopsys 的情况下启动来验证我的假设。

只需设置 $PATH 变量而不包含以下任何路径:

  • /usr/local/lib/tcl8.0
  • /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/lib/tcl8.0
  • /pune/tools/synopsys/vera/2009.12-6/tcl8.0/library
  • /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/library

还要确保$TCL$TCL*类型变量也没有引用这些目录。

对 userA 有效,对 userB 无效,如何调试?

如果您遇到过这种情况:这对 userA 有效,但对 userB 无效,那么很可能是环境配置问题。为了调试这个,我会执行以下操作:

[userA]$ env > userA_env.txt
[userB]$ env > userB_env.txt

然后diff这2个文件看看有什么不同:

$ diff -y userA_env.txt userB_env.txt | less
rvm_gemsets_path=/home/saml/.rvm/gemsets                        rvm_gemsets_path=/home/saml/.rvm/gemsets
MANPATH=/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:   MANPATH=/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:
ORBIT_SOCKETDIR=/tmp/orbit-saml                                 ORBIT_SOCKETDIR=/tmp/orbit-saml
rvm_scripts_path=/home/saml/.rvm/scripts                        rvm_scripts_path=/home/saml/.rvm/scripts
PERLBREW_VERSION=0.59                                           PERLBREW_VERSION=0.59
HOSTNAME=grinchy                                                HOSTNAME=grinchy
rvm_bin_path=/home/saml/.rvm/bin                                rvm_bin_path=/home/saml/.rvm/bin
IMSETTINGS_INTEGRATE_DESKTOP=yes                                IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/tmp/keyring-Xewu2I/gpg:0:1                      GPG_AGENT_INFO=/tmp/keyring-Xewu2I/gpg:0:1
PERLBREW_PERL=perl-5.14.0                                       PERLBREW_PERL=perl-5.14.0
...

左侧的条目将来自用户 A,右侧的条目将来自用户 B。

答案2

解决此类问题的常见捷径是以straceroot 身份运行程序时,grep 查找您作为用户(在您的情况下)遇到困难的文件,init.tcl并使文件系统的该部分可供普通用户使用,而不仅仅是普通用户通过 root 通过chmod.

相关内容