【发布时间】:2012-11-12 09:46:39
【问题描述】:
我正在尝试从 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 脚本?
非常感谢
【问题讨论】:
-
附带说明,对 [split $files] 的调用是无关的。首先, split 返回拆分列表,您没有保存结果。其次,因为 glob 已经将文件名作为列表返回,如果将其视为字符串并对其进行拆分,它最终会破坏带有空格的文件名。