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

Bash

Bash Problem Overview


I'm learning through this tutorial to learn bash scripts to automate a few tasks for me. I'm connecting to a server using putty.

The script, located in .../Documents/LOG, is:

#!/bin/bash
# My first script
echo "Hello World!"

And I executed the following for read/write/execute permissions

chmod 755 my_script

Then, when I enter ./my_script, I'm getting the error given in the title.

Some similar questions wanted to see these, so I think they might help:

which bash

> /bin/bash

and

echo $PATH

> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/bin/mh

I tried adding current directory to PATH, but that doesn't work..

Bash Solutions


Solution 1 - Bash

Run following command in terminal

sed -i -e 's/\r$//' scriptname.sh

Then try

./scriptname.sh

It should work.

Solution 2 - Bash

I have seen this issue when creating scripts in Windows env and then porting over to run on a Unix environment.

Try running dos2unix on the script:

http://dos2unix.sourceforge.net/

Or just rewrite the script in your Unix env using vi and test.

Unix uses different line endings so can't read the file you created on Windows. Hence it is seeing ^M as an illegal character.

If you want to write a file on Windows and then port over, make sure your editor is set to create files in UNIX format.

In notepad++ in the bottom right of the screen, it tells you the document format. By default, it will say Dos\Windows. To change it go to

  • settings->preferences
  • new document / default directory tab
  • select the format as unix and close
  • create a new document

Solution 3 - Bash

If you use Sublime Text on Windows or Mac to edit your scripts:

Click on View > Line Endings > Unix and save the file again.

enter image description here

Solution 4 - Bash

This is caused by editing file in windows and importing and executing in unix.

dos2unix -k -o filename should do the trick.

Solution 5 - Bash

In notepad++ you can set it for the file specifically by pressing

Edit --> EOL Conversion --> UNIX/OSX Format

enter image description here

Solution 6 - Bash

problem is with dos line ending. Following will convert it for unix

dos2unix file_name

NB: you may need to install dos2unix first with yum install dos2unix

another way to do it is using sed command to search and replace the dos line ending characters to unix format:

$sed -i -e 's/\r$//' your_script.sh

Solution 7 - Bash

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$//' setup.sh

Solution 8 - Bash

For Eclipse users, you can either change the file encoding directly from the menu File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶):

Eclipse change file encoding

Or change the New text file line delimiter to Other: Unix on Window > Preferences > General > Workspace panel:

Eclipse workspace settings

Solution 9 - Bash

I was able to resolve the issue by opening the script in gedit and saving it with the proper Line Ending option:

> File > Save As...

In the bottom left of the Save As prompt, there are drop-down menus for Character Encoding and Line Ending. Change the Line Ending from Windows to Unix/Linux then Save.

Selecting the

Solution 10 - Bash

Atom has a built-in line ending selector package

More details here: https://github.com/atom/line-ending-selector

Solution 11 - Bash

I develop on Windows and Mac/Linux at the same time and I avoid this ^M-error by simply running my scripts as I do in Windows:

$ php ./my_script

No need to change line endings.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioncartonnView Question on Stackoverflow
Solution 1 - BashNivin V JosephView Answer on Stackoverflow
Solution 2 - BashcowlsView Answer on Stackoverflow
Solution 3 - BashMario CampaView Answer on Stackoverflow
Solution 4 - BashStonecoldIMView Answer on Stackoverflow
Solution 5 - BashUrikView Answer on Stackoverflow
Solution 6 - BashMd. Shafiqur RahmanView Answer on Stackoverflow
Solution 7 - Bashkalyani chaudhariView Answer on Stackoverflow
Solution 8 - BashChristos LytrasView Answer on Stackoverflow
Solution 9 - BashNWRichmondView Answer on Stackoverflow
Solution 10 - Bashtuanh118View Answer on Stackoverflow
Solution 11 - BashMrMacvosView Answer on Stackoverflow