Bash script and /bin/bash^M: bad interpreter: No such file or directory
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
#!/bin/bash # My first script echo "Hello World!"
And I executed the following for
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:
I tried adding current directory to
PATH, but that doesn't work..
I have seen this issue when creating scripts in Windows env and then porting over to run on a Unix environment.
dos2unix on the script:
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
- new document / default directory tab
- select the format as unix and close
- create a new document
Run following command in terminal
sed -i -e 's/\r$//' scriptname.sh
It should work.
Read more... Read less...
If you use Sublime Text on Windows or Mac to edit your scripts:
View > Line Endings > Unix and save the file again.
This is caused by editing file in windows and importing and executing in unix.
dos2unix -k -o filename should do the trick.
In notepad++ you can set it for the file specifically by pressing
Edit --> EOL Conversion --> UNIX/OSX Format
problem is with dos line ending. Following will convert it for unix
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
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