我正在使用SGE(Sun Grid Engine)向网格提交作业.我还perlbrew用来管理我安装的Perl版本.我写了一些简短的sh脚本,用于运行perl脚本,需要特定的Perl版本(5.12.2),如下所示:
#!/bin/bash
#$-S /bin/bash
source /home/dave/.bash_profile
/home/dave/perl5/perlbrew/bin/perlbrew switch perl-5.12.2
/home/dave/scripts/proc_12.pl --in=/home/dave/in/in.store --dir=/home/dave/in/dir2 --params=/home/dave/in/params.p
Run Code Online (Sandbox Code Playgroud)
现在,当我提交单个作业时,一切正常,但是当我提交很多时,我开始收到perlbrew相关的错误消息,例如:
ln: creating symbolic link `current' to `perl-5.12.2': File exists
ln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan': File exists
ln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan2dist' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan2dist': File exists
ln: cannot remove `/home/dave/perl5/perlbrew/bin/cpanp': No such file or directory
ln: cannot remove `/home/dave/perl5/perlbrew/bin/enc2xs': No such file or directory
ln: cannot remove `/home/dave/perl5/perlbrew/bin/find2perl': No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以我猜这/home/dave/perl5/perlbrew/bin/perlbrew switch perl-5.12.2 …
我现在正在使用perlbrew来管理perl的多个版本,但perlbrew是全局的.如果我perlbrew switch perl-5.10.1在任何shell中,那么所有shell和脚本现在将使用perl版本5.10.1.没有孤立.有没有办法让perlbrew开关在shell本地,或者是否有类似的工具能够在本地更改活动perl?
我希望能够安装多个版本的Perl,但我也需要通过架构来安装它们.
我知道我可以使用perlbrew来获得版本安装:5.10.1,5.12.3,5.16.0等.我找不到通过架构,Solaris-sparc,Solaris-x86,Linux安装的方法-i686,Linux-x86_64等
做一个手动安装,我可以做到这一点
做手动安装并不是什么大不了的事,但perlbrew使管理等方面更容易.
编辑:正如在评论中提到的,我正在使用跨各种平台安装的通用主目录NFS.
我安装了两个版本的Perl --as(只用主编号命名版本)
5.20.0安装为5.20和5.20.0 安装线程为 5.20t这是输出 perlbrew list
* 5.20 (5.20.0)
5.20t (5.20.0)
Run Code Online (Sandbox Code Playgroud)
然后我将Perl升级为5.20.1使用
$ perlbrew upgrade-perl
Upgrading 5.20 to 5.20.1
Installing /Users/corti/perl5/perlbrew/build/perl-5.20.1 into ~/perl5/perlbrew/perls/5.20
This could take a while. You can run the following command on another shell to track the status:
tail -f ~/perl5/perlbrew/build.perl-5.20.1.log
5.20 is successfully installed.
Run Code Online (Sandbox Code Playgroud)
Perl似乎正确升级(v5.20.1):
$ perl -version
This is perl 5, version 20, subversion 1 (v5.20.1) built for darwin-2level
Copyright 1987-2014, Larry Wall
Perl …Run Code Online (Sandbox Code Playgroud) 我有一台机器在Windows上使用Ubuntu上的Bash运行Windows 10.它使用某种没有适当硬链接支持的FUSE文件系统.
因此,典型的perl编译失败.如果我想编译,我需要做:
echo "dont_use_nlink='define'" >> Policy.sh
./Configure -des
make
make install
Run Code Online (Sandbox Code Playgroud)
我理想的是能够使用perlbrew或plenv管理我的perls并将dont_use_nlink参数传递给我构建的任何perl.有没有办法做到这一点?
我的同事编写了一个名为“Newlands”的 Dancer psgi 应用程序,它使用了 perlbrew。我正在尝试使用 systemd 让应用程序在系统启动时启动。我有这个服务文件:
[Unit]
Description=Newlands
After=network-online.target
[Service]
Type=forking
User=newlands
WorkingDirectory=/home/newlands/working/newlands
PIDFile=/home/newlands/newlands.pid
ExecStartPre=/bin/bash -c 'env > /tmp/newlands.environment'
ExecStartPre=/bin/mkdir -p /tmp/newlands/newlands/session/
ExecStart=/usr/local/bin/starman --host 127.0.0.1 --listen :5000 --env production --preload-app --workers 12 --daemonize --error-log /var/log/newlands/newlands.error.log --pid /home/newlands/newlands.pid bin/newlandia.psgi
EnvironmentFile=-/tmp/newlands.environment
Restart=always
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
然而,即使使用 ExecStartPre 技巧(我从http://tech.akom.net/archives/93-Getting-a-systemd-unit-to-read-your-.bashrc-file-for-its-environment获得) .html,修改后不使用 --login 选项),与 perlbrew 相关的环境变量都没有正确设置。因此,当 @INC 在库实际所在的 /home/newlands/.perlbrew/libs/perl-5.20.1@newlands 中不包含任何内容时,我最终会出现错误,指示在 @INC 中找不到缺少的库。
当实际以 newlands 用户身份登录时, /tmp/newlands.environment 处的输出文件似乎仍然与“env”的输出有很大不同。我想获取 /opt/perlbrew/etc/bashrc 或类似的东西,但我知道这是不可能的。
有小费吗?谢谢!
我正在尝试使用 perlbrew 在我的 macOS 环境中安装 perl 版本 5.33.4。我无法理解为什么它在安装过程中失败。
我开始使用 安装\curl -L https://install.perlbrew.pl | bashperlbrew,然后在我的 zshenv 中添加了这一行:source ~/perl5/perlbrew/etc/bashrc并开始使用perlbrew install perl-5.33.4命令安装 perl 。我也尝试过不同的 perl 版本,但问题是一样的。
这是记录的错误:
# Failed test 20 - array should contain one result or more: libc => () at t/DynaLoader.t line 127
# got "0"
# expected >= "1"
../ext/DynaLoader/t/DynaLoader.t .....................................
Failed 1/44 subtests
Test Summary Report
-------------------
../ext/DynaLoader/t/DynaLoader.t (Wstat: 0 Tests: 44 Failed: 1)
Failed test: 20
Files=2652, Tests=1183275, 624 wallclock secs …Run Code Online (Sandbox Code Playgroud) perlbrew install perl编译并运行所有需要永久安装在我的机器上的测试(> 60分钟).是否可以使用perlbrew安装pre-built-test-run perl,就像apt-get那样可以节省时间?
我没有对系统的root访问权限,所以我使用local :: lib安装perl模块,我使用bootstrapping方法安装它:
perl Makefile.PL --bootstrap=~/foo
make test && make install
echo '[ $SHLVL -eq 1 ] && eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"' >>~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
然后我成功安装了cpanm并使用cpanm来安装模块FAST.但是,当我尝试使用fasgrep函数时,我收到以下错误:
% fasgrep
Can't locate FAST.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /home/dpearton/perl5/bin/fasgrep line 5.
Run Code Online (Sandbox Code Playgroud)
我已经检查过FAST.pm在本地lib中是可用的,但系统似乎并没有在那里寻找它.
根据路径变量,它应该在正确的位置寻找:
$ echo PATH=$PATH ; env|sort|grep PERL
PERL5LIB=/home/dpearton/perl5/lib/perl5:/home/dpearton/perl5/lib/perl5
PERLBREW_BASHRC_VERSION=0.73
PERLBREW_HOME=/home/dpearton/.perlbrew
PERLBREW_ROOT=/home/dpearton/perl5/perlbrew
PERL_LOCAL_LIB_ROOT=/home/dpearton/perl5
PERL_MB_OPT=--install_base "/home/dpearton/perl5"
PERL_MM_OPT=INSTALL_BASE=/home/dpearton/perl5
Run Code Online (Sandbox Code Playgroud)
我甚至将导出PER5LIB = $ HOME/perl5/lib/perl5添加到我的.bash_profile中它仍然无效.
我很擅长使用perl.问题可能是我还安装了perlbrew吗?如果是这样,我怎样才能对prelbrew进行"干净"的卸载?
当我跑...
perlbrew switch perl-5.16.0
......我明白了......
A sub-shell is launched with perl-5.16.0 as the activated perl. Run 'exit' to finish it.
...然后出现一个bash提示符.
这是预期的行为吗?如果没有,我该如何解决?