使用bash脚本将outfile传递给另一个程序

时间:2015-01-26 09:03:16

标签: linux bash

我有以下bash代码,用于批处理多个文件,由3个不同的程序处理:

for i in *.txt
do
program1 -in ${i} -out Prog1_out_${i}

program2 -in Prog1_out_${i} -out Prog2_out_${i}

program3 -in Prog2_out_${i} -out Prog3_out_${i}

done

我遇到问题,程序2没有找到输入,这是程序1的输出,当然程序3没有找到所需的输入。

任何人都可以帮忙解决问题吗?

由于

1 个答案:

答案 0 :(得分:0)

如果程序在成功时产生输出,则可以使它们依赖于先前命令的成功,如下所示:

program1 -in ${i} -out Prog1_out_${i}   &&

program2 -in Prog1_out_${i} -out Prog2_out_${i} &&

program3 -in Prog2_out_${i} -out Prog3_out_${i}

因此,如果其中一个程序失败,则不会调用链的其余部分。

但是,如果输出的创建与程序的成功无关,但您只想检查文件是否存在,则可以在调用programx之前添加相应的检查,即

if [ -f "${i}" ]
then
    progx ...
fi

正如你一直在做同样的事情,这可以推广到所有程序(未经测试):

for i in *.txt
do
    mv $i Prog0_out_$i
    for program in 0 1 2 
    do
        INFILE=Prog{$program}_out_${$i}
        if [ ! -r ${INFILE} ]
        then
            break
        fi
        program{$program} -in ${INFILE} -out "Prog{$program}_out_$((i+1))"
    done
done