除非在脚本名称之前插入Perl,否则无法执行Perl脚本

时间:2017-04-01 13:15:55

标签: perl execution

运行Lubuntu - 初学者Perl程序员

脚本XXX.pl位于~/projects/XXX/XXX.pl

第一行是shebang

#!/usr/bin/perl

运行权限设置为任何人。

在目录~/projects/XXX中,命令

~/projects/XXX$ perl XXX.pl

按需要工作,但命令

~/projects/XXX$ XXX.pl

XXX.pl: command not found

失败

我错过了什么?

2 个答案:

答案 0 :(得分:5)

执行Perl脚本的两个常用选项是:

perl XXX.pl

./XXX.pl

两种方式都假设您当前的工作目录包含脚本 XXX.pl ,否则它将无效。

正如jm666在评论中已经指出的那样,您通常不会在没有预先./的情况下从当前工作目录执行程序或脚本,主要是出于安全原因。现在,您可能想知道为什么这是必要的。

<强>解释

您的shell使用名为$PATH的环境变量的内容来查找外部命令(非内置程序)在文件系统中的位置。如果您想查看$PATH中的内容,只需在shell中输入以下内容:

echo $PATH

现在您可以看到$PATH变量不包含您当前的工作目录。结果是你的shell无法找到程序 XXX.pl 。通过预先./,您可以指示shell执行之后的程序。 但是,如果要使用./script.pl执行Perl脚本,则有两个要求:

  1. 脚本必须是可执行的(请与ls -l联系)
  2. 第一行(shebang行)必须是#!/path/to/your/perl因为你的shell需要这些信息来查找perl解释器才能运行你的脚本
  3. 然而,使用

    执行脚本时不需要#1和#2
    perl XXX.pl
    

    因为它直接用你的脚本调用perl解释器。

    有关详细信息,请参阅how to make Perl scripts executable on Linuxmake the script itself directly executable with chmod

答案 1 :(得分:1)

可以找到脚本吗?

你的路径中有.吗?如果不是,请将其添加到您的路径中,或使用./XXX.pl代替XXX.pl

可以执行脚本吗?

您是否拥有该文件的执行权限?使用chmod u+x XXX.pl进行修复。

翻译是否正确?

which perl会告诉您使用perl XXX.pl时使用的解释器。这就是你的shebang(#!)行的路径。