Ano*_*thu 0 scripting perl shebang
我有多个 Perl 脚本,其中 shebang 行已过时。也就是说,shebang 指向 Perl 的旧版本。
每条路径旧:
#!/data/oracle10.0/perl/bin/perl
Run Code Online (Sandbox Code Playgroud)
新版本的 Perl 已发布
#!/data/**oracle11.0**/perl/bin/perl
Run Code Online (Sandbox Code Playgroud)
我已将 perl 命令软链接到新版本 perl 的位置。
perl -> /data/oracle11.0/perl/bin/perl
Run Code Online (Sandbox Code Playgroud)
现在,shebang 指向旧版本,perl 命令指向新版本。
所以,当我这样做时perl sample.pl,shebang 就会被忽略。
我编写了一些示例脚本来查看这一点。当我使用该命令时,shebang 行似乎被忽略了perl。但我记得旧版本的 perl 并非如此(Shebang 被认为是超过perl命令的)。
所以我的问题是,新版本的 perl(5.10)和旧版本(5.8)对于 shebang 行是否有不同的行为?如果将 perl 命令传递给新版本的 Perl,它会忽略 shebang 行吗?
当您运行时perl myscript.pl,它将启动perl二进制文件并将其myscript.pl作为输入,然后运行。在这种情况下,无论 Perl 版本如何,您都将始终perl从 中获得第一个二进制文件。$PATH正如 mpapec 在他的评论中所说,您可以perl使用命令来确定这是哪个which perl。
当您运行./myscript.plshell 时,它会查找 shebang 行,如果存在,它会执行 shebang 中列出的程序,并将文件内容作为输入。(如果没有,shell 本身会尝试处理文件的内容。)在这种情况下,您将始终perl从 shebang 获取路径,同样无论 Perl 版本如何。
这是基本的 *nix 行为,并且在 Perl 版本之间没有改变(因为它perl一开始就不受管理)。