我没有在TCL编程,但我确实使用它们,如tkcvs和tkdiff。我注意到他们将自己声明为shell脚本
#!/bin/sh
#-*-tcl-*-
更重要的是,通过tclsh运行它们也不起作用,我得到这样的错误:
Initialization failed
标题中的第二行也让我感到困惑,因为AFAIK,shell只看#!线。这是怎么回事?
答案 0 :(得分:3)
Tcl脚本通常设置为使用比您所示略多的运行。它通常最强大,如下所示:
#!/bin/sh
# \
exec tclsh "$0" ${1+"$@"}
他们最初使用shell,因为tcl没有标准安装位置,因此无法依赖该位置。相反,通过启动系统shell并使用它来启动tclsh可执行文件,您可以确定运行已安装的tclsh,只要它存在于PATH上即可。 shell评估脚本并查看导致它执行已安装的tclsh二进制文件的exec tclsh "$0"
并将其作为第一个参数传递给$ 0(脚本文件名),该参数使用tcl解释器重新运行脚本。
我的示例中的第二行在tcl解释器评估脚本时注释掉第三行。反斜杠导致第二行和第三行在被tclsh读取时被视为单个注释,因此tcl不会尝试再次运行exec。
在您的剪辑中,# -*-tcl-*-
是标记,表示编辑文件时emacs使用的模式。见the documentation.
真的不足以继续提供错误消息。它似乎不是来自Tcl解释器本身。 (即tcl源中的'git grep'与该字符串不匹配)。