88

I wanted to execute a shell script:

-rwxr-x--x 1 root root   17234 Jun  6 18:31 create_mgw_3shelf_6xIPNI1P.sh

I tried to do a standard procedure, but I got this error:

./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0 
DEBUG   cd/etc/opt/ldapfiles/ldif_in ;
./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
**ERROR  sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**

What does it mean? I was doing this as the root user under the root group.

Does it mean that the file does not have the correct permission for the root user?

158

This isn't a permission issue, you aren't getting a message about permissions

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

The script indicates that it must be executed by a shell located at /bin/bash^M. There is no such file: it's called /bin/bash.

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.

Remove the spurious CR characters. You can do it with the following command:

sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh
  • 17
    Or install and use the dos2unix program. – argentpepper Jun 6 '13 at 22:56
  • 3
    thank you for this, all other answers Ive found so far have not helped. This one did it! – qodeninja Jun 9 '14 at 23:39
  • doesn't have to be Windows, I got a similar message after copying a script from OS X to Ubuntu... dos2unix worked great in that case, whereas replacing '\r' with nothing would be worse, since there are no '\n' characters in the file. – Michael Sep 14 '16 at 17:39
  • @Michael macOS uses \n because it's Unix. The script was maybe from an earlier Mac OS version? You could run sed -i -e 's/\r$/\n/' script.sh in that case. – wjandrea Dec 21 '16 at 4:49
  • 1
    Open it in gedit and, do Save As, and select "Line Ending: Unix/Linux" – Mattmon Nov 27 '17 at 12:11
18

In vim you could also use :set ff=unix and then save the file, or :set ff=dos to get DOS formatting again.

  • this one did it for me, thx – bunkerdive Aug 6 '15 at 19:53
14

Your file has DOS/Windows style line endings (CR LF), but on Unix-like systems only the LF control character is used as line break.

The additional CR control character is shown encoded as ^M in your output. You can also see it when you run cat -A create_mgw_3shelf_6xIPNI1P.sh.

To convert the line endings from DOS/Windows style to Unix style, there's a tool called dos2unix. You install it using:

sudo apt-get install dos2unix

Then you can simply convert files' line endings in both ways using

dos2unix FILENAME
unix2dos FILENAME

In your case, simply run this command below and the script file will be converted in-place:

dos2unix create_mgw_3shelf_6xIPNI1P.sh

After that Bash should be able to interpret the file correctly.

  • Thanks, dos2unix is also available for macOS via brew. – Mohamed El-Nakeep Sep 18 '18 at 5:35
4

Do vi <your script>.

then :set list; it will display any of the special characters in your script.

then replace the character:

:%s/^M//gc [to type ^M press Ctrl + v + m]

  • See above answer about using :fileformat which is IMHO better for handling this than global substitution Also, see stackoverflow.com/questions/14609779/… for ideas on how to handle automatically – qneill Aug 11 '17 at 15:58
4

As explained in the other answers, this is a format issue. So, the answer is to change the format from DOS to Unix style line endings. This is yet another simple way to fix your file 'in place'

fromdos file

It's available in package tofrodos:

sudo apt-get install tofrodos
3

The Problem ist you edit with Dos!

open your file with vi then set unix with:

:set ff=unix
:wq

and it all fine

2

You can also use gedit to remove the unwanted characters. Under the File menu select Save As and set the line end type unix/Linux.

  • +1 for this because it helped me with MacOS line endings. – Bobble Apr 3 '14 at 11:52

protected by Community Jun 12 '18 at 13:20

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.