I suspect your script may have DOS-style line endings. In DOS (and Windows), each line of a text file ends with carriage return (variously represented as
^M) followed by a linefeed (
^J). Unix text files, on the other hand, end each line with just a linefeed. If you give a unix tool (like bash) a DOS-formatted file, it'll interpret the carriage return as part of the line, and get quite confused. In this case, it looks to me like FILE is actually getting set to
/u0146121/bin/list.txt^M, which doesn't exist, and when the shell reports the problem the carriage return confuses the terminal and the end of the error message gets printed over top of the beginning.
To check, try printing your script with
cat -v /path/to/script -- if you see ^M at the end of lines, you have a DOS-format file. Your system probably has a command to translate it, but the command name varies (e.g. it might be
fromdos or ...). If you can't find a relevant command, you can use this trivial perl script:
perl -pi -e 's/\r//g' /path/to/script