gnu-parallel
и xargs
гораздо лучше, но для демонстрации того, как это сделать с помощью цикла while, я вижу два основных варианта:
Делать все одновременно:
while IFS="," read ip port; do
ruby test.rb "http://$ip:$port/" <&- &
done <test1.txt
Ограничьтесь двумя за один раз:
while IFS="," read ip port; do
ruby test.rb "http://$ip:$port/" <&- &
IFS=, read ip port || break
ruby test.rb "http://$ip:$port/" <&- &
wait
done <test1.txt
Второй вариант далеко не идеален, так как между завершением одного процесса и завершением второго будет мертвое время, и эта проблема усугубляется по мере добавления новых процессов. Вы можете попытаться исправить это в оболочке, но так как xargs
и parallel
уже существуют, в этом нет особого смысла.