linux - 在 Perl 中修改子进程的环境

标签 linux perl ipc

我不确定为什么这不起作用,但也许我把事情过于简单化/过于复杂了

我正在编写最终需要调用外部程序的 Perl 脚本。问题是,该程序需要 LD_LIBRARY_PATH 环境变量的修改版本,以便找到供应商未在标准位置安装的几个库。

OK,环境在%ENV,可以重写,是吗?

我想如果我在父级中更改LD_LIBRARY_PATH,它会影响子级的动态链接。

所以我有:

use Env qw(@LD_LIBRARY_PATH);
use IPC::System::Simple qw(capturex $EXITVAL);

# We need these to establish the call to rsq later
my ($rsqexe, $rsqhome, $suffix) = fileparse($config->rsq());
push @LD_LIBRARY_PATH, $rsqhome;

eval {
  $output = capturex(
    $config->rsq(),
    qq/"$source"/
  );
};

但子进程因错误提示无法找到共享库而终止。

我该如何改进?

我确实需要在成功执行后检查 $output 的内容。

最佳答案

    eval {
      $output = capturex(
        $config->rsq(),
        qq/"$source"/
      );
    };

这就是问题所在:我没有检查 $@ 中的内容(或者 $EVAL_ERR 如果您使用 ENGLISH;)

如果有的话,我会发现问题出在引用 qq/"$source"/ - 因为 capturex() 没有 调用 shell(这是期望的行为)引号打破文件名(即 test.pdf 存在,但 ""test.pdf"" 确实存在不是)。

关于linux - 在 Perl 中修改子进程的环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785073/

相关文章:

c - 使用信号量的共享内存安全写入

c++ - 不安全、超快的跨进程内存缓冲区?

c - 用于 IPC 的 sprintf 或 itoa 或 memcpy

php - Wordpress - 具有相同数据库表的多个博客页面

java - JAXB 解码返回 null 属性命令行

c - exec*() 后内存使用会发生什么

linux - 从 bash 脚本返回错误的 BASH 变量

perl - Perl中是否有相当于PHP的addslashes?

java - 如何在 Perl 中将文件夹中的图像与其存储在 mysql 中的元数据相关联?

perl - 使用简单文件实现锁