2013-08-22 51 views
0

我試圖執行一個shell命令,並使用反引號Perl中捕捉它的輸出,並且輸出發送到標準輸出的同時,重定向輸出到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 

意味着罩體命令輸出不被髮送到STDOUT。有人可以解釋爲什麼會這樣嗎?

任何幫助非常感謝。

+2

你的第一個版本沒有做你認爲正在做的事情。 STDOUT被重定向到perl的管道,所以你只需將兩行輸出寫入STDOUT,並且兩者都以perl變量結束。在第二個版本中,第二個副本位於'$ output [1]'中。 – Barmar

+0

非常感謝您指出 - 什麼纔是正確的方法呢? –

+0

不是,我在發佈之前查看了這個問題。我的問題與此並不相同,因爲我沒有真正問過*如何做到這一點。 –

回答

0

您可以參考此FAQ link瞭解如何從外部命令中保存stdout/stderr。

你可以參考this答案知道如何將shell命令的輸出重定向到perl變量和stdout。相關question

相關問題