4

我正在尝试从 tcl 脚本运行 csh 脚本。

下面的tcl脚本调用了一个csh脚本

#!/usr/bin/tclsh


set scripts_path /scratch/TCL_scripts/scripts_adders

set synthesis /scratch/TCL_scripts/synthesis.csh


set files [glob -directory $scripts_path *]
split $files
set files [lsort $files]
set i 1

foreach script $files {

     puts "hello"
     # puts [pwd]
     exec /bin/csh -c $synthesis
     puts $i

}

并且(开始的)csh 文件如下:

#!/bin/csh -f


echo abcdefgh

当我只从我的 unix 终端执行 csh 文件时,它工作正常。当我调用我的 Tcl 脚本时,它会运行并且确实会写入“hello”并打印 i,但不会执行 csh 文件,因为“abcdefgh”从未出现在终端中。我也尝试过其他命令,但我总是遇到同样的问题:当我从 Tcl 脚本运行 csh 脚本时,它永远不会执行,即使当我直接从终端运行它时它运行良好。

(我的 Tcl 脚本和 csh 脚本都是可执行的)

为了从我的 Tcl 脚本运行我的 csh 脚本,我必须做什么?

非常感谢

4

1 回答 1

5

csh 脚本确实是为您运行的,但默认情况下,它的标准输出成为Tcl命令的结果exec(如果它在标准错误中产生任何内容,那将成为 的错误结果exec)。要使输出和错误出现在终端上,您必须修改exec如下:

exec /bin/csh -c $synthesis >@stdout 2>@stderr

说“将>@标准输出重定向到以下通道”(stdout在这种情况下),并且2>@对标准错误执行相同的操作。

于 2012-11-12T10:29:01.567 回答