为什么perl的CaptureOutput :: capture_exec_combined运行" source"

时间:2018-01-28 22:41:06

标签: perl capture-output

使用CaptureOutput :: capture_exec_combined在linux上运行perl脚本。它似乎并不想执行" source"

#!/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只是回复了一条消息)

我明白了......

不能执行" source":/tool/pandora64/.package/perl-5.18.2-gcc481/lib/site_perl/5.18.2/IO/没有这样的文件或目录CaptureOutput.pm第84行。

1 个答案:

答案 0 :(得分: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