【问题标题】:Cleanse a shell runtime environment to run system Perl?清理 shell 运行时环境以运行系统 Perl?
【发布时间】:2013-06-10 10:37:59
【问题描述】:

我需要在运行 Oracle EBS 的 Solaris 9 SPARC 环境中创建几个 Perl 程序,其中一个将从 cron 运行。将运行 Perl 的 UNIX 帐户设置了所有环境变量以运行以 Oracle 为中心的程序,因此当我运行“/usr/bin/perl -V”时,会出现以下编译错误。幸运的是,cron 运行 Perl 不受 Oracle 环境设置的影响。

bash-2.05$ /usr/bin/perl -V
Perl lib version (5.00503) doesn't match executable version (5.008) at /u01/app/applmgr/pr/iAS/Apache/perl/lib/5.00503/sun4-solaris/Config.pm line 7.
Compilation failed in require.
BEGIN failed--compilation aborted.

我的第一个想法是使用 BEGIN 块做一些房屋清洁,这样我就可以使用系统 Perl 而不是 Oracle EBS 提供的版本。

#!/usr/bin/perl

BEGIN {
  delete $ENV{PERL5LIB};
  delete @INC[0..$#INC];
  push @INC, map { "/usr/local/lib/perl5/$_" } (
    '5.8.0','5.8.0/sun4-solaris',
    'site_perl','site_perl/5.8.0','site_perl/5.8.0/sun4-solaris'
  );
}

print "Hello clean Perl environment! :)\n";

我无权修改 UNIX 帐户的本地配置文件,所以这是处理这种情况的正确方法吗?

【问题讨论】:

  • /u01/app/applmgr/pr/iAS/Apache/perl 下是否也有 perl 二进制文件?使用它可能比使用系统 perl 二进制更简单。
  • Solaris 9 有env -i吗?
  • @chepner - 是的。有一个 perl 二进制文件,但由于它与 ERP 系统相关联,因此我必须小心处理这种环境。
  • @jordanm - 这就是解决方案。当您回答时,我会接受它:)

标签: bash shell perl


【解决方案1】:

env 命令的-i 选项允许您在干净的环境中启动程序。从那时起env manpage:

   -i, --ignore-environment
          start with an empty environment

给你的 perl 例子:

env -i perl -V

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多