while
IFS= read -r a1 <&3 &&
IFS= read -r a2 <&4 &&
IFS= read -r a3 <&5 &&
IFS= read -r a4 <&6
do
./program "$a1" "$a2" "$a3" "$a4" 3<&- 4<&- 5<&- 6<&-
done 3< arg1.txt 4< arg2.txt 5< arg3.txt 6< arg4.txt
Isso executa o loop até que um dos arquivos esteja esgotado. Substitua o &&
s por ||
s para executá-lo até que todos os arquivos estejam esgotados (usando argumentos vazios para arquivos menores).
Com o GNU xargs
, você também pode fazer:
paste -d '\n' arg[1-4].txt | xargs -n 4 -r -d '\n' ./program
(embora tenha cuidado, o stdin de ./program
seria, então, /dev/null
)