【发布时间】:2013-08-22 07:57:59
【问题描述】:
我正在尝试执行一个 shell 命令,并在 perl 中使用反引号捕获其输出,同时将输出发送到 STDOUT,
#!/usr/bin/perl
use strict;
use warnings;
my $output = `echo test1 | tee /dev/fd/1`;
print "op : $output";
这有效,并给了我这样的输出,
op : test1
test1
但是,当我将命令的输出分配给数组而不是标量时,它不像以前那样工作,
my @output = `echo test1 | tee /dev/fd/1`;
print "op : $output[0]";
这会打印数组变量,但不会打印 echo 输出,
op : test1
意味着shell命令输出没有被发送到STDOUT。有人可以解释为什么会这样吗?
非常感谢任何帮助。
【问题讨论】:
-
您的第一个版本并没有像您认为的那样做。 STDOUT 被重定向到通往 perl 的管道,因此您只需将每一行输出写入 STDOUT 两次,并且它们都以 perl 变量结尾。在第二个版本中,第二个副本在
$output[1]。 -
非常感谢您指出这一点 - 正确的方法是什么?
-
不是真的,我在发帖之前看过那个问题。我的问题与我的问题不同,因为我并没有真正询问 如何 去做。
-
您写道“正确的做法是什么?”这不是在问怎么做吗?
-
嗯,同意,但这不是原始问题的一部分,这就是我想说的,但无论如何。
标签: perl shell unix stdout backticks