linux - 如何在不安装 perlbrew 的情况下指定用于脚本的 perl 版本

标签 linux perl

我有一个脚本必须在 Perl 5.10.1 中运行,尽管我大学的 linux 集群系统使用的是最新版本的 Perl。我尝试安装 Perlbrew,但我认为它不起作用。

由于调用/运行此脚本的方式,我不确定如何在 shebang 中指定 perl 版本。有“cluster.pl”,通过运行“./command.txt”运行。

此外,我认为我无法安装 Perlbrew,因为它是大学的 linux 系统:复制粘贴安装命令后,我的终端屏幕显示已安装 perlbrew 补丁,但是当我使用“perlbrew install perl-5.10. 1”,它会说“command perlbrew not found”我不知道如何运行脚本

截至目前,cluster.pl 有这个 shebang:

#!/usr/bin/perl

一个相关的问题说在命令行写这个

/program/perl_v5.6.1/bin/perl scriptName.pl
#OP needed to use version 5.6.1, unlike me (I need 5.10.1)

但是,我不知道“程序”是OP的目录还是路径的强制部分

下面是command.txt,里面有必要的输入参数:

#this is command.txt
./cluster.pl Datachr1 2 galGal5.Chroinfo.txt

基本上,建议的 shebang 会去哪里?我也会在我的路径中包含“程序”吗?

最佳答案

如果您将脚本包装在 Perl 的打包框架中,它会自动为您处理。当它安装脚本时,它会用实际的 perl 更改 shebang 行。您最终会在文件顶部看到类似这样的内容:

#!/usr/local/perls/perl-5.30.0/bin/perl
    eval 'exec /usr/local/perls/perl-5.30.0/bin/perl -S $0 ${1+"$@"}'
        if $running_under_some_shell;
#!/usr/local/bin/perl

您可以尝试使用我的应用丰富的发行版。下载 tarball 并使用您想要的 perl 运行 Makefile.PL。运行 make 并将内容构建到 blib 暂存目录中。你应该在那里看到修改后的 shebang:

$ /Users/brian/bin/perls/perl5.30.0 MAkefile.PL
Checking if your kit is complete...
Looks good
WARNING: Older versions of ExtUtils::MakeMaker may errantly install README.pod as part of this distribution. It is recommended to avoid using this path in CPAN modules.
Generating a Unix-style Makefile
Writing Makefile for App::rhich
Writing MYMETA.yml and MYMETA.json

$ make build
make: *** No rule to make target `build'.  Stop.

$ make
cp lib/App/rhich.pm blib/lib/App/rhich.pm
cp script/rhich blib/script/rhich
"/usr/local/perls/perl-5.30.0/bin/perl" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/rhich
Manifying 1 pod document
Manifying 1 pod document
brian@otter app-rhich  (master)[3125]

$ more blib/script/
#!/usr/local/perls/perl-5.30.0/bin/perl
package rhich;
use strict;
use warnings;

但是,如果您的 perl 路径是指向其他 perl 的符号链接(symbolic link),这可能会造成混淆。我不使用 perlbrew,因为我认为它除了让您查找下载 URL 之外并没有增加太多。我 install multiple perls (和 How should I install more than one version of Perl? )并且可以使用它们的路径所以我知道使用哪个版本。 env 也有类似的问题,具体取决于您设置路径的方式。你如何处理它取决于你决定如何管理事物,但正是这些问题表明便利的工具并不是那么方便。

关于linux - 如何在不安装 perlbrew 的情况下指定用于脚本的 perl 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56530104/

相关文章:

regex - 如何使用正则表达式/终端工具删除 csv 单元格内的换行符?

android - 在 Android 上运行 Perl 脚本

java - 从 Linux 获取 Java 应用程序的正确路径文件

c - 如何使用 SIGUSR1 备用值

linux - 如何验证 makefile 中非空行和非注释行的文件

linux - 在文件中搜索文本字符串并替换它

mysql - 如何使用 MySQL 在 perl 中使用连接池?

linux - 为什么/etc/login.defs 中的 UMASK 设置不被接受?

matlab - MATLAB 中的 1 行 try/catch 等价物

perl - 为什么我使用 hypnotoad 在 Heroku 上崩溃了?