2013-05-29 80 views
2

我想查找遠程計算機上/ tmp中的可用空間。我可以從我的機器用下面的命令做到這一點:在遠程計算機上查找/ tmp中的可用空間

ssh host-name df /tmp | awk '{ print $4 }' | tail +2` 

它的工作原理,並給出了一個輸出這樣的事情:9076656,其中可用空間KB。

但是,當我把這個命令放在一個perl程序中時,我得到了有關使用未初始化值爲$ 4的錯誤消息。

使用未初始化值$ 4級聯

這裏是如何我這樣做的Perl代碼:

my $output = `ssh $server df /tmp | awk '{ print $4 }' | tail +2`; 

任何想法我怎麼能解決這個問題呢?

+1

有趣的是,這是「題外話」,當它表現出的編程問題,有理由進行一些在編程語言中對字符串插值的評論,並已收到編程解決方案。我猜Perl標籤太滿了,因爲你們被要求發癢的緊密手指,呃? –

回答

2

問題是$4是由Perl插值的,就像你期望插入的$server而不是文字一樣。直接的解決辦法是逃避美元符號:\$4。然而,就像Brian Agnew所說的那樣,在perl中使用awk來完成perl擅長的事情是相當多餘的。

use strict; 
use warnings; 
use Data::Dumper; 

my @output = `ssh $server df /tmp`;  # capture output in array 
@output = map { (split)[3] } @output; # take only 4th field 
print Dumper \@output;     # display data 

然後你可以使用各種工具陣列修剪@output根據自己的喜好,例如彈出,推送,移位,不移位,拼接,使用切片和下標。例如,採取一切,但前兩行:

print @output[2 .. $#output]; 

卸下前兩行:

splice @output, 0, 2;