42

我正在尝试运行sh脚本并在 Mac 上收到以下错误:

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

我怎样才能解决这个问题?

4

6 回答 6

81

删除^M控制字符

perl -i -pe 'y|\r||d' script.pl
于 2013-06-16T08:14:40.587 回答
53

/usr/bin/perl^M:

从脚本开头的行中删除末尾^M的。那是一个虚假的 ASCII 13 字符,它让 shell 发疯了。usr/bin/perl#!

如果看不到字符,可能需要使用二进制编辑器检查文件。

您可以这样做将文件转换为 Mac 行尾格式:

$ vi your_script.sh

在 vi 中输入一次:

 :set ff=unix

 :x
于 2013-06-16T07:56:44.440 回答
7

问题是您试图在 Linux/Unix/OSX 机器上使用 DOS/Windows 文本格式。

在 DOS/Windows 文本文件中,换行符(也称为换行符)是两个字符的组合:回车符 (CR) 后跟换行符 (LF)。在 Unix 文本文件中,换行符是单个字符:换行符 (LF)。

Dos2unix 可以为您转换文件的编码,例如:

dos2unix yourfile yourfile

如需帮助,请运行:man dos2unix.

于 2014-09-01T09:28:04.587 回答
6

您的脚本中似乎有奇怪的行尾:^M是回车符\r。将您的脚本转换为 Unix 行结尾(只是\n代替\r\n,这是 Windows 系统上的行结尾)。

于 2013-06-16T07:58:30.290 回答
2

另一种方法:

sudo ln -s /usr/bin/perl /usr/local/bin/perl`echo -e '\r'`
于 2013-06-16T16:44:08.790 回答
2

如果你更喜欢 Sublime Text - 只需转到 View -> Line Endings 并检查 Unix。

于 2015-05-28T08:31:44.883 回答