无法从 bash shell 脚本执行 Tcl 脚本
Posted
技术标签:
【中文标题】无法从 bash shell 脚本执行 Tcl 脚本【英文标题】:Tcl script cannot be executed from bash shell script 【发布时间】:2011-10-21 06:34:33 【问题描述】:我对 bash shell 脚本和 tcl 脚本有一个比较奇怪的问题,从 shell 脚本中调用。
从角度来看,我有一个 shell 脚本,它可以生成一些其他的 shell 脚本,以及 tcl 脚本。一些生成的 shell 脚本使用 tclsh 命令调用 tcl 脚本。 这些文件被创建并存储在一个目录中,该目录也是由初始 shell 脚本创建的,该目录生成文件和要存储这些文件的文件夹。
问题在于生成的 shell 脚本,它调用 tclsh 来运行 tcl 脚本。即使生成了文件并且shell脚本有执行权限,shell的响应还是找不到嵌入在shell脚本中的tcl文件。
但是,该文件存在,我可以使用 vi 和 gedit、RHEL 9.0 或 Centos 5.7 平台打开它。但是,当我从创建的目录中取出相同的 shell 脚本时,不会出现此错误。你能提出任何想法吗?我还检查了目录权限,但它们似乎没问题。我还检查了 shell 脚本是否有多余的字符,但没有找到任何东西。
【问题讨论】:
“来自shell的响应是找不到嵌入在shell脚本中的tcl文件”是什么意思? 究竟是什么错误信息?每个脚本的顶部是否有正确的#!
行?
【参考方案1】:
从您的描述中很难判断到底出了什么问题;您遗漏了准确诊断问题所需的所有信息。不过……
您的 PATH 上有一个 tclsh
,但您的脚本没有运行,尽管被修改为可执行?这意味着您的#!
行有问题。当前的最佳做法是您使用以下内容:
#!/usr/bin/env tclsh
这将在您的 PATH 中搜索 tclsh 并使用它,它比任何其他替代方法都容易得多。
可能导致问题的另一件事是如果您的 Tcl 程序包含:
package require Tcl 8.5
然而路径上tclsh
使用的Tcl 版本是8.4。我已经看过很多次了,如果这是您的问题,您需要确保安装了正确的 Tcl rpm 并且将您的 #!
行更新为:
#!/usr/bin/env tclsh8.5
与 Tcl 8.6 类似,但在这种情况下,您可能也需要从源代码构建自己的并将其安装在合适的位置。 (Tcl 8.6 仍然只适用于专家。)
(问题是 RHEL 以及跟踪 RHEL 的 Centos 在涉及 Tcl 时非常保守。不过,其原因与这个答案并没有真正的密切关系。)
【讨论】:
最后,这是我的内部 bash 脚本错误,同时使用相对路径更改目录......但是,非常感谢您的回复和帮助。【参考方案2】:问题会不会像您没有“。”一样简单。在你的路径中?如果不将脚本称为“myscript.tcl”,而是将其称为“./myscript.tcl”或“/absolute/path/to/myscript.tcl”,该怎么办?
【讨论】:
以上是关于无法从 bash shell 脚本执行 Tcl 脚本的主要内容,如果未能解决你的问题,请参考以下文章