在Perl中,如何将一个命令的输出传递给另一个命令的输入?
我想以shell的方式执行此操作,但不使用shell。
我知道我可以使用shell并转义命令的参数来执行此操作,但我不想使用shell。我也更喜欢使用与Perl一起分发的模块,而不是CPAN上的模块。
我可以手动使用fork
和exec
,但这不适用于Windows。
答案 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");