如何解决如何从TCL脚本执行Shell脚本
我有一个Shell脚本,该脚本读取另一个文件作为参数。在Shell终端中,我使用它的方式如下:
source checker.sh waiver.file
现在,我想在如下的TCL脚本中获取此Shell脚本的源代码
TCL_script.tcl
link
set RUN .
exec checker.sh waiver.file
当我执行上面的TCL脚本时,终端只是挂起而无法工作。
这里的任何专家都可以帮助我在TCL脚本中运行Shell脚本吗?
谢谢!
解决方法
如何运行它在很大程度上取决于checker.sh
的工作原理。问题是shell的source
命令通过读取脚本并在当前shell会话中执行脚本来工作(Tcl的source
的工作原理类似,但适用于另一种语言)。因为它在同一个会话中,所以它具有对各种功能的各种访问权限,而这些功能实际上不会作为子进程使用(或者说,它们将拥有这些功能,但它们不会持久存在)。
从Tcl运行该代码的简单方法是(假设您在正确的目录中):
exec sh checker.sh waiver.file
如果遇到问题,我不会感到惊讶!不幸的是,可能出现的问题非常广泛,以至于很难猜测如何提前解决这些问题。
也就是说,您正在绞死 的事实是有用的信息。这可能意味着脚本试图以对管道特别不满意的方式来输入和输出标准。我们可以尝试通过重定向解决该问题:
exec sh checker.sh waiver.file <@stdin >@stdout 2>@stderr
如果这不起作用,则可能需要使用Expect运行程序。 expect
程序是Tcl,但有一些额外的命令。这可能足以让您入门:
spawn sh
send "source checker.sh waiver.file\r"
interact
要很好地使用Expect,还有很多事情。
(重写checker.sh
可能会更容易;这里的细节很重要。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。