我有一个命令,希望从管道输入。例如,考虑着名的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);
这不起作用(我没有输出)。我可以解决这个问题
调用bash
和echo
:
my $proc = run 'bash', '-c', "echo $input | cat";
但有没有办法可以在不运行bash
和echo
的情况下执行此操作?
在Perl5中,我只需my $pid = open my $fh, '|-', 'cat';
然后print $fh $str
。
答案 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,顺便说一句