我正在尝试运行sh
脚本并在 Mac 上收到以下错误:
/usr/bin/perl^M: bad interpreter: No such file or directory
我怎样才能解决这个问题?
删除^M
控制字符
perl -i -pe 'y|\r||d' script.pl
/usr/bin/perl^M:
从脚本开头的行中删除末尾^M
的。那是一个虚假的 ASCII 13 字符,它让 shell 发疯了。usr/bin/perl
#!
如果看不到字符,可能需要使用二进制编辑器检查文件。
您可以这样做将文件转换为 Mac 行尾格式:
$ vi your_script.sh
在 vi 中输入一次:
:set ff=unix
:x
问题是您试图在 Linux/Unix/OSX 机器上使用 DOS/Windows 文本格式。
在 DOS/Windows 文本文件中,换行符(也称为换行符)是两个字符的组合:回车符 (CR) 后跟换行符 (LF)。在 Unix 文本文件中,换行符是单个字符:换行符 (LF)。
Dos2unix 可以为您转换文件的编码,例如:
dos2unix yourfile yourfile
如需帮助,请运行:man dos2unix
.
您的脚本中似乎有奇怪的行尾:^M
是回车符\r
。将您的脚本转换为 Unix 行结尾(只是\n
代替\r\n
,这是 Windows 系统上的行结尾)。
另一种方法:
sudo ln -s /usr/bin/perl /usr/local/bin/perl`echo -e '\r'`
如果你更喜欢 Sublime Text - 只需转到 View -> Line Endings 并检查 Unix。