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

Håk*_*and 3 pipe perl6 raku

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

$ echo Hello | cat
Hello
Run Code Online (Sandbox Code Playgroud)

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

use v6;

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

这不起作用(我没有输出).我可以通过调用bash和解决这个问题echo:

my $proc  = run 'bash', '-c', "echo $input | cat";
Run Code Online (Sandbox Code Playgroud)

但是,有没有一种方法,我可以做到这一点,但不运行bashecho

在Perl5中,我可以简单地做my $pid = open my $fh, '|-', 'cat';,然后print $fh $str.

Hol*_*lli 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;
Run Code Online (Sandbox Code Playgroud)

您也可以直接从程序中输入: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!?» 
Run Code Online (Sandbox Code Playgroud)

直接来自文档,顺便说一下