How to remove the ^M return character on Linux

dos2unix -n oldfile.txt newfile.txt

or if the error is within a script:

sed -i -e 's/\r$//'

Executing a shell script, might end with

/bin/bash^M: bad interpreter: No such file or directory

The ^M is a carriage return character. Linux uses the line feed character to mark the end of a line, whereas Windows uses the two-character sequence CR LF. Your file has Windows line endings, which is confusing Linux.