我有一个perl脚本,其中包含第一行,如下所示:
#!/usr/bin/env perl
我已经读过,这是为了在环境中找到perl而执行的。但现在,当我在命令行/usr/bin/env perl
上执行此操作时,perl本身会被执行(位于/usr/bin/perl
)。但是当我使用./myscript.pl
启动脚本时,它会显示以下错误:
/usr/bin/env: No such file or directory
这是因为它无法找到perl
,因为当我输入/usr/bin/env xxxxxx
时也会出现此错误。
有人可以解释一下,当我在命令行或脚本中运行它时究竟有什么区别吗?
答案 0 :(得分:7)
最可能的原因是你在myTexture
中以某种方式获得了DOS行结尾(CRLF)。这会导致myscript.pl
搜索名为env
的文件(其中perl^M
表示CR字符),而您没有。{/ p>
答案 1 :(得分:1)
回答这个问题:
有人可以解释一下,当我在命令行或脚本中运行它时究竟有什么区别吗?
#!/usr/bin/env perl
这基本上告诉OS(了解shebang)在$ PATH列表中找到第一个“perl”可执行文件,并通过在shebang之后附加当前文件名来执行该程序。它不会直接调用“perl”,就像你在大多数perl程序中找到的shebang一样:
#!/usr/bin/perl
这是因为大多数类UNIX系统(特别是Linux)都带有安装在/ usr / bin / perl上的perl。有些UNIX默认没有perl,但后面可以轻松安装。只是他们最终可能会在/ usr / local / bin / perl。通常perl程序员称它们为“system perl”。
第一个将使用$ PATH中的fisrt perl,第二个将采用系统附带的perl。
如果你没有在shell上指定完整路径,那么它也会占用$ PATH中的第一个。