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

pass outfile to another program using bash script

我有以下 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 也找不到所需的输入。

任何人都可以提供解决问题的建议吗?

谢谢

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

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