Vai ser mais rápido & limpador para filtrar a entrada até apenas as linhas relevantes antes de alimentá-la no loop de leitura:
n=10
start=$1
end=$((start+n))
cat in | sed "${start},${end}!d" | while read s; do
call "$s"
done
Nota: as linhas de impressão de $ 1 a $ 1 + n linhas na verdade imprimem n + 1 linhas (por exemplo, as linhas de impressão de 5 a 15 são, na verdade, 11 linhas). Se você quiser imprimir n linhas a partir de $ 1, use end=$((start+n-1))
.