我有一个简单的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
而不是循环内的那个终端查看终端上的输出。
正因为如此,我的工作暂停了,有什么主意吗?
答案 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
均已正确创建。因此,当在循环外部调用脚本但在内部调用脚本时,它将自动打印到终端接口。上面的评论中对此进行了详细解释。