Not able to execute a .sh file: /bin/bash^M: bad interpreter
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?
Solution 1:
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
Solution 2:
In vim you could also use :set ff=unix
and then save the file, or :set ff=dos
to get DOS formatting again.