How to solve “bad interpreter: No such file or dir

2019-03-08 18:34发布

I'm trying to run a sh script and get the following error on Mac:

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

How can I fix this?

标签: macos perl sh
6条回答
仙女界的扛把子
2楼-- · 2019-03-08 18:39

An alternative approach:

sudo ln -s /usr/bin/perl /usr/local/bin/perl`echo -e '\r'`
查看更多
小情绪 Triste *
3楼-- · 2019-03-08 18:42

The problem is that you're trying to use DOS/Windows text format on Linux/Unix/OSX machine.

In DOS/Windows text files a line break, also known as newline, is a combination of two characters: a Carriage Return (CR) followed by a Line Feed (LF). In Unix text files a line break is a single character: the Line Feed (LF).

Dos2unix can convert for you the encoding of files, in example:

dos2unix yourfile yourfile

For help, run: man dos2unix.

查看更多
别忘想泡老子
4楼-- · 2019-03-08 18:43

/usr/bin/perl^M:

Remove the ^M at the end of usr/bin/perl from the #! line at the beginning of the script. That is a spurious ASCII 13 character that is making the shell go crazy.

Possibly you would need to inspect the file with a binary editor if you do not see the character.

You could do like this to convert the file to Mac line-ending format:

$ vi your_script.sh

once in vi type:

 :set ff=unix

 :x
查看更多
做自己的国王
5楼-- · 2019-03-08 18:52

You seem to have weird line endings in your script: ^M is a carriage return \r. Transform your script to Unix line endings (just \n instead of \r\n, which is the line ending on Windows systems).

查看更多
倾城 Initia
6楼-- · 2019-03-08 19:03

Remove ^M control chars with

perl -i -pe 'y|\r||d' script.pl
查看更多
爱情/是我丢掉的垃圾
7楼-- · 2019-03-08 19:04

And if you prefer Sublime Text - simply go to View -> Line Endings and check Unix.

查看更多
登录 后发表回答