0

默认情况下,当您构建Tcl/Tk时,它会创建文件

tclsh85
wish85

然而,许多程序调用tclshwish。这是一个解决方案

cp tclsh85 tclsh
cp wish85 wish

但是,您可以简单地构建tclshwish直接,也许使用configure参数?

4

2 回答 2

3

这种行为是正确的,因为它允许多个版本的解释器及其库在系统中共存。反过来,该系统确实提供了一种将某个版本“祝福”为“默认”的方法——例如,Debian 提供了“alternatives”。本质上,通常会创建一个带有“规范”名称的符号链接,指向真正的可执行文件,例如/usr/bin/tclsh/usr/bin/tclsh85。对于那些不关心运行时精确版本的应用程序,通过这样的符号链接可以获得“祝福”版本,某些其他应用程序仍然可以通过引用解释器的真实可执行文件名称来选择一些特定的运行时版本。

这也提供了一种针对实验运行时版本测试现有程序的简单方法:您只需运行/usr/bin/tclsh86 /path/to/the/script.tcl而不是/path/to/the/script.tcl像通常依赖shebang来选择解释器那样运行。

于 2012-11-03T21:38:17.883 回答
0

很久以前,Tcl 和 Tk 的构建曾经以您描述的方式工作。改成现在的系统(把版本号放在名字里),让多个版本共存更顺畅;这在当时是用户社区非常强烈的需求。

如果您想放弃对使用哪个版本的控制,请将无版本文件名符号链接到真实文件名(或使用分发机制)。或者,在文件顶部使用这段(相当可怕的)混合 shell/Tcl 代码:

#!/bin/sh
# Try with a versionless name \
exec tclsh "$0" ${1+"$@"}
# Otherwise, try with tclsh8.6 \
exec tclsh8.6 "$0" ${1+"$@"}
# Otherwise, try with tclsh8.5 \
exec tclsh8.5 "$0" ${1+"$@"}
# Otherwise, try with tclsh8.4 \
exec tclsh8.4 "$0" ${1+"$@"}
# Otherwise... well... give up! \
echo "no suitable Tcl interpreter" >&1; exit 1

这依赖于这样一个事实,即与 Unix shell 不同,Tcl将\注释行末尾的 a 视为注释延伸到下一行。

(我自己?#!这些天我通常不排队;我不认为写作是强加的tclsh8.5 myscript.tcl。)

于 2012-11-03T22:09:53.013 回答