无法从 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本

在Quartus中如何使用TCL脚本文件配制管脚

shell脚本速成

shell脚本

shell脚本调试打印日志问题

大坑,jenkins 配置publish over ssh bash 插件,远程部署,无法执行shell脚本