我的perl脚本以#!/usr/bin/perl
或#!/usr/bin/env perl
首先,第二个版本是什么意思?
其次,我使用Ubuntu。所有脚本都设置为可执行文件。当我尝试通过简单地调用它的名称(例如./script.pl
)来运行脚本时,我得到: No such file or directory
。当我通过perl ./script.pl
调用时它运行正常。
为什么?
答案 0 :(得分:3)
#!/usr/bin/env perl
使用标准POSIX工具env
来解决UNIX不支持shebang行(AFAIK)中的相对路径的“问题”。在修改环境变量之后,env
工具可用于启动程序(在本例中为perl)。在这种情况下,不修改任何变量,然后env
在PATH中搜索Perl并运行它。因此,即使在/usr/bin
中没有安装Perl,但在其他路径中(必须在PATH变量中),具有该特定shebang行的脚本才会起作用。
然后,你问./script.pl
无法正常工作:你说它设置了可执行位,就像chmod +x script.pl
一样?但它也是从一个shebang(#!
)线开始的吗?也就是说,前两个字节必须是#!
,并且必须后跟文件路径(到perl)。这是告诉内核运行此脚本的程序所必需的。如果你这样做了,路径是否正确?您想尝试#!/usr/bin/env perl
变体; - )
答案 1 :(得分:2)
使用#!/usr/bin/env perl
解决了perl
不一定在每个系统上/usr/bin
的问题;它只是让脚本更便携
在相关说明中,对于您的第二个问题,是/usr/bin/perl
和/或/usr/bin/env
?如果没有,这可以解释为什么直接运行脚本不起作用;如果您将脚本作为perl