在Perl中,如何将一个命令的输出传递给另一个命令的输入?

时间:2016-09-25 03:24:33

标签: perl

在Perl中,如何将一个命令的输出传递给另一个命令的输入?

我想以shell的方式执行此操作,但不使用shell。

我知道我可以使用shell并转义命令的参数来执行此操作,但我不想使用shell。我也更喜欢使用与Perl一起分发的模块,而不是CPAN上的模块。

我可以手动使用forkexec,但这不适用于Windows。

2 个答案:

答案 0 :(得分:6)

使用IPC::Run很容易。

run \@cmd1, '|', \@cmd2;

例如,

prog0

#!/usr/bin/perl
use IPC::Run qw( run );
print("The parent's PID is $$\n");
run([ 'prog1' ], '|', [ 'prog2' ]);

prog1

#!/usr/bin/perl
print("cmd1's parent's PID is ".getppid()."\n");

prog2

#!/usr/bin/perl
while (<>) {
   chomp;
   print("Got <<$_>>\n");
}
print("cmd2's parent's PID is ".getppid()."\n");

prog0的输出:

The parent's PID is 6619
Got <<cmd1's parent's PID is 6619>>
cmd2's parent's PID is 6619

答案 1 :(得分:0)

使用exec

perl -e 'exec(bash => (-o => "pipefail", -c => "find . -type f|xargs ls -l"));'

perl -e 'exec("bash", "-o",  "pipefail", "-c", " find . -type f|xargs ls -l");