在Tcl foreach循环中运行sh脚本

时间:2018-11-24 15:22:32

标签: bash foreach tcl

我有一个简单的bash脚本test.sh,它带有四个参数。

#!/bin/bash
echo "1: $1"
echo "2: $2"
echo "3: $3"
echo "4: $4"

我尝试从Tcl脚本test.tcl调用它

exec bash test.sh arg1 arg2 arg3 arg4

foreach i {1 2 3} {
    exec bash test.sh arg1 arg2 arg3 arg4
}

对脚本的第一次调用输出与我期望的一样,但是来自foreach循环的调用似乎从未执行任何操作。实际上,exec命令可以替换为exec ls,使事情变得更加简单。循环外的调用工作正常,但循环内的调用则无济于事。

编辑 正如评论中指出的那样,提到我正在使用内置在软件包(VMD,可视分子动力学)中的Tcl控制台可能很重要。从该终端接口,我将这些脚本称为“交互式”,并从循环外的exec而不是循环内的那个终端查看终端上的输出。

正因为如此,我的工作暂停了,有什么主意吗?

1 个答案:

答案 0 :(得分:0)

明显的“问题”源于试图“交互式地”运行这些脚本。如果我将bash脚本修改为

#!/bin/bash
echo "1: $1" > $5
echo "2: $2" >>$5
echo "3: $3" >>$5
echo "4: $4" >>$5

和tcl脚本为

exec bash test.sh arg1 arg2 arg3 arg4 file1.txt

foreach i {1 2 3} {
    exec bash test.sh arg1 arg2 arg3 arg4 file2.txt
}

我看到两个文件file{1,2}.txt均已正确创建。因此,当在循环外部调用脚本但在内部调用脚本时,它将自动打印到终端接口。上面的评论中对此进行了详细解释。