/ usr / bin / env perl可以作为命令工作,但不能在perl脚本中工作

时间:2016-01-14 13:35:39

标签: bash perl unix shebang env

我有一个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时也会出现此错误。

有人可以解释一下,当我在命令行或脚本中运行它时究竟有什么区别吗?

2 个答案:

答案 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中的第一个。