gpt4 book ai didi

pipe - 如何通过管道传输字符串以处理'STDIN?

转载 作者:行者123 更新时间:2023-12-01 04:37:21 27 4
gpt4 key购买 nike

我有一个命令需要来自管道的输入。例如,考虑著名的 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

最佳答案

通过管道传输多个命令也很容易。实现相当于管道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 , 顺便说一句

关于pipe - 如何通过管道传输字符串以处理'STDIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47271120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com