首页 > 解决方案 > How do I store the value returned by either run or shell?

问题描述

Let's say I have this script:

# prog.p6
my $info = run "uname";

When I run prog.p6, I get:

$ perl6 prog.p6
Linux

Is there a way to store a stringified version of the returned value and prevent it from being output to the terminal?

There's already a similar question but it doesn't provide a specific answer.

标签: raku

解决方案


您需要$*OUT通过设置启用标准输出管道,否则默认为:out。所以:

my $proc = run("uname", :out);
my $stdout = $proc.out;
say $stdout.slurp;
$stdout.close;

可以缩短为:

my $proc = run("uname", :out);
say $proc.out.slurp(:close);

如果您想在 stderr 上单独捕获输出而不是在 stdout 上,您可以执行以下操作:

my $proc = run("uname", :out, :err);
say "[stdout] " ~ $proc.out.slurp(:close);
say "[stderr] " ~ $proc.err.slurp(:close);

或者,如果您想将 stdout 和 stderr 捕获到一个管道,则:

my $proc = run("uname", :merge);
say "[stdout and stderr] " ~ $proc.out.slurp(:close);

最后,如果您不想捕获输出并且不想将其输出到终端:

my $proc = run("uname", :!out, :!err);
exit( $proc.exitcode );

推荐阅读