如何管道字符串来处理'STDIN?

时间:2017-11-13 18:28:06

标签: pipe perl6

我有一个命令,希望从管道输入。例如,考虑着名的cat命令:

$ echo Hello | cat
Hello

假设我在Perl 6程序中有一个字符串,我想管道输入命令:

use v6;

my $input = 'Hello'; # This is the string I want to pipe to the command.
my $proc  = run 'cat', :in($input);

这不起作用(我没有输出)。我可以解决这个问题 调用bashecho

my $proc  = run 'bash', '-c', "echo $input | cat";

但有没有办法可以在不运行bashecho的情况下执行此操作?

在Perl5中,我只需my $pid = open my $fh, '|-', 'cat';然后print $fh $str

1 个答案:

答案 0 :(得分:5)

管道好几个命令也很容易。要实现相当于管道回声“Hello,world”| cat -n在Perl 6中,并从第二个命令捕获输出,你可以做

my $p1 = run 'echo', 'Hello, world', :out;
my $p2 = run 'cat', '-n', :in($p1.out), :out;
say $p2.out.get;

您也可以直接从程序中输入:in管道,方法是将其设置为True,这将通过Proc:

上的.in方法使管道可用
my $p = run "cat", "-n", :in, :out;
$p.in.say: "Hello,\nworld!";
$p.in.close;
say $p.out.slurp: :close;
# OUTPUT: «1  Hello,␤ 
#          2  world!␤» 

直接从docs,顺便说一句