【问题标题】:Redirect output of shell command to perl variable and stdout [duplicate]将shell命令的输出重定向到perl变量和标准输出[重复]
【发布时间】: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


【解决方案1】:

您可以参考这个FAQ link 了解如何从外部命令保存stdout/stderr。

您可以参考this 答案了解如何将shell 命令的输出重定向到perl 变量和stdout。相关question

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 2012-08-15
    • 1970-01-01
    • 2017-03-31
    • 2019-02-13
    • 2018-08-12
    • 2013-04-30
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多