如何解决"糟糕的翻译:没有这样的文件或目录"

Ela*_*nda 35 macos perl sh

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

/usr/bin/perl^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

Сух*_*й27 70

删除^M控制字符

perl -i -pe 'y|\r||d' script.pl
Run Code Online (Sandbox Code Playgroud)


ser*_*gio 47

在/ usr/bin中/ perl的^ M:

从脚本开头的行^M末尾删除.这是一个虚假的ASCII 13字符,让shell变得疯狂.usr/bin/perl#!

如果您没有看到该字符,可能需要使用二进制编辑器检查文件.

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

$ vi your_script.sh
Run Code Online (Sandbox Code Playgroud)

一次在vi类型:

 :set ff=unix

 :x
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 6

问题是你在Linux/Unix/OSX机器上尝试使用DOS/Windows文本格式.

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

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

dos2unix yourfile yourfile
Run Code Online (Sandbox Code Playgroud)

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


amo*_*mon 5

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

  • OS X是一个Unix系统.但是,某些工具(编辑器)可能已设置为Windows行结尾以进行互操作.从Windows计算机将文件作为二进制文件传输时,也会出现错误的行结尾.您是自己编写脚本还是从某处复制它? (2认同)