如何通过管道传输字符串以处理'STDIN?
How to pipe a string to process' STDIN?
我有一个命令需要来自管道的输入。例如,考虑著名的 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
。
通过管道传输多个命令也很容易。实现相当于管道echo "Hello, world" | perl 6 中的 cat -n,并捕获第二个命令的输出,您可以执行
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,顺便说一句
我有一个命令需要来自管道的输入。例如,考虑著名的 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
。
通过管道传输多个命令也很容易。实现相当于管道echo "Hello, world" | perl 6 中的 cat -n,并捕获第二个命令的输出,您可以执行
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,顺便说一句