Linux 如何从TCL脚本执行shell脚本

Linux 如何从TCL脚本执行shell脚本,linux,shell,tcl,exec,eval,Linux,Shell,Tcl,Exec,Eval,我有一个Shell脚本,它读取另一个文件作为参数。在Shell terminal中,我使用它如下所示: source checker.sh waiver.file 现在,我想在TCL脚本中编写这个shell脚本,如下所示 TCL\u脚本.TCL link set RUN . exec checker.sh waiver.file 当我执行上面的TCL脚本时,终端只是挂起,不工作 这里的专家能帮我在TCL脚本中运行Shell脚本吗 谢谢 如何运行它关键取决于checker.sh的工作方式。问题

我有一个Shell脚本,它读取另一个文件作为参数。在Shell terminal中,我使用它如下所示:

source checker.sh waiver.file
现在,我想在TCL脚本中编写这个shell脚本,如下所示
TCL\u脚本.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 <@stdin >@stdout 2>@stderr
使用Expect well还有很多事情要做


(重写
checker.sh
可能会更容易;这里的细节非常重要。)

通过以下方式手动运行脚本时会发生什么情况:
/checker.sh.file
?确保它具有执行权限。什么。
link
RUN
是否用于?路径中是否存在
checker.sh
?@Shawn是的,checker.sh确实存在于路径中。
exec sh checker.sh waiver.file <@stdin >@stdout 2>@stderr
spawn sh
send "source checker.sh waiver.file\r"
interact