Do any of your functions read from stdin (ex: the read
command)? If so, that will slurp up the rest of the FUNCTION_FILE.
Change the while loop to use a different file descriptor:
line_num=0 while read -u3 line; do echo "LINE_NUMBER=$(( ++line_num ))" $func done 3<"$function_file"
Get out of the habit of using ALL_CAPS_VARIABLES -- one day you'll accidentally use "PATH" and break your script.