/usr/bin/perl^M: bad interpreter: No such file or directory
ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
/usr/bin/perl^M: bad interpreter: No such file or directory
I just installed Arch Linux on a Raspberry Pi and wrote a little perl script. But whenever I try to run the script, I get the following error:
Code:
/usr/bin/perl^M: bad interpreter: No such file or directory
Yes, I know that usually happens when you transfer a file from a Windows system to a Linux system (since Windows uses CRLF pairs, and Linux only LF as line endings). But the problem here is, that there is no CR at the end of the lines.
I checked the file (on Linux) in a Hex Editor and it confirmed there are only LFs (0x0A).
So what/who is adding the CRs? Is it bash? How do I get rid of them? I know about dos2unix, but that doesn't help since there aren't any CRs in the file in the first place...
To answer my own question: it was caused by a number of reasons:
First of all, I use vsftpd to transfer the file from a Windows machine to the Arch Linux machine. I specifically used ASCII mode for the transfer. vsftp by default ignores ASCII file transfer requests and does a binary transfer instead. I did not know that.
The reason I didn't see those CRs was because I use JOE as my editor (it has a HEX edit mode). And JOE by default automatically translates CRLF to LF when reading, and translates it back to CRLF when writing. I did not know that either (and is new for me since I've installed JOE on many, many machines before).
So in short, I had to tell vsftpd to accept ASCII transfers as well, and tell JOE not to automatically translate CRLF to LF and vice versa.
To answer my own question: it was caused by a number of reasons:
First of all, I use vsftpd to transfer the file from a Windows machine to the Arch Linux machine. I specifically used ASCII mode for the transfer. vsftp by default ignores ASCII file transfer requests and does a binary transfer instead. I did not know that.
The reason I didn't see those CRs was because I use JOE as my editor (it has a HEX edit mode). And JOE by default automatically translates CRLF to LF when reading, and translates it back to CRLF when writing. I did not know that either (and is new for me since I've installed JOE on many, many machines before).
So in short, I had to tell vsftpd to accept ASCII transfers as well, and tell JOE not to automatically translate CRLF to LF and vice versa.
thanks for the update. but it doesnt explain why dos2unix didnt work ?
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.