1

使用 CaptureOutput::capture_exec_combined 在 linux 上运行 perl 脚本。它似乎不想执行“源”

#!/usr/bin/env perl
use IO::CaptureOutput qw/capture_exec_combined/;
$cmd = "source test_capout.csh";
my ($stdouterr, $success, $exit_code) = capture_exec_combined($cmd);
print  "${stdouterr}\n";

(test_capout.csh 只是回显一条消息)

我得到...

无法执行“源”:/tool/pandora64/.package/perl-5.18.2-gcc481/lib/site_perl/5.18.2/IO/CaptureOutput.pm 第 84 行没有这样的文件或目录。

4

1 回答 1

3

source导致指定的脚本由给定source命令的 shell 执行。在 shell 之外使用是没有意义source的,这就是为什么它不是程序而是内置 shell 命令的原因。您需要生成一个 shell 并让 shell 执行命令。

capture_exec_combined('csh', '-c', 'source test_capout.csh');  # Hardcoded
  -or-
capture_exec_combined('csh', '-c', 'source "$1"', $script);    # Variable

当然,由于shell随后退出,因此可以简化为

capture_exec_combined('csh', 'test_capout.csh');        # Hardcoded
  -or-
capture_exec_combined('csh', $script =~ s{^-}{./-}r);   # Variable
于 2018-01-29T00:05:16.853 回答