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

DOS uses a carriage return (^M) with a line feed therefore linux system confused and thinks the script should be executed by /bin/bash^M which doesn’t exist.

Solution:

Option 1:

Install dos2unix and convert the file

dos2unix myscript.sh

Option 2:

vi and vim will convert line endings when you specify the file format.

vi myscript.sh

Hit ESC to enter command mode where you can set the format and save your changes.

:set fileformat=unix

:x!

Option 3:

sed is handy for cleaning up things like this from the command line.

sed -i 's/r//' myscript.sh