Alguma de suas funções lê de stdin (ex: o comando read
)? Se assim for, isso vai sugar o resto do FUNCTION_FILE.
Altere o loop while para usar um descritor de arquivo diferente:
line_num=0
while read -u3 line; do
echo "LINE_NUMBER=$(( ++line_num ))"
$func
done 3<"$function_file"
Saia do hábito de usar ALL_CAPS_VARIABLES - um dia você acidentalmente usará "PATH" e quebrará seu script.