用于循环遍历几个不同输入文件的程序的Bash脚本

时间:2011-03-05 16:12:29

标签: bash shell scripting

我想在后台运行一个程序(带几个变量和一个输入文件)的bash脚本,但是我希望脚本一次只处理一个输入文件(一个目录中的所有输入文件)。 e.g。

#!/bin/sh  
for file in *  
do  
    ~/FrameDP/bin/FrameDP.pl --cfg ~/FrameDP/cfg/FrameDP.cfg --no_train --infile /home/bop08olp/FrameDP/data/"$file" --outdir ~/FrameDP/test  
done

我猜测上面的脚本不会在每次处理单独的输入文件之间等待,而是会立即启动它们。该程序生成许多子进程。任何指针赞赏。谢谢!

2 个答案:

答案 0 :(得分:0)

sh循环未并行化,您可以通过运行验证它:

for i in *
    sleep 1
done

你会看到,如果你有> 1个总时间> 1的文件超过1但等于'文件数'秒。

因此,如果实际运行您提供的代码片段同时运行所有进程,那是因为您的perl脚本具有在后台运行的功能,您应该检查perl脚本,而不是shell脚本。

答案 1 :(得分:0)

也许我的想法太简单了,我来不及了,但是

find . -depth 1 -exec ~/FrameDP/bin/FrameDP.pl --cfg ~/FrameDP/cfg/FrameDP.cfg --no_train --infile /home/bop08olp/FrameDP/data/{} --outdir ~/FrameDP/test \; &

其中{}代替前变量$ file和“\;”是否需要序列来表示exec子句的结束?