在远程计算机上的/ tmp中查找可用空间

时间:2013-05-29 09:29:00

标签: perl bash shell ssh

我想找出远程机器上/ tmp中的可用空间。我可以使用我机器上的以下命令来执行此操作:

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

IT工作并提供如下输出:9076656,以KB为单位的可用空间。

但是当我将此命令放入perl程序时,我收到有关使用未初始化值为4美元的错误消息。

  

在连接中使用未初始化的值$ 4

以下是我在perl代码中的使用方法:

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

任何想法如何解决此问题?

2 个答案:

答案 0 :(得分: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,例如pop,push,shift,unshift,splice,使用切片和下标。例如,除了前两行之外的其他所有行:

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

删除前两行:

splice @output, 0, 2;

答案 1 :(得分:1)

使用Perl生成awk脚本似乎有点冗余(和重量级),因为Perl具有读取文件,解析字段等的能力。我宁愿investigate reading a process' output via Perl and splitting the output lines