使用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行。
答案 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