2

我想找出远程机器上 /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`;

有什么想法可以解决这个问题吗?

4

2 回答 2

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;
于 2013-05-29T10:10:17.133 回答
1

鉴于 Perl 能够读取文件、解析字段等,使用 Perl 生成 awk 脚本似乎有点多余(而且重量级)。我宁愿研究通过 Perl 读取进程的输出并拆分输出行

于 2013-05-29T09:31:28.960 回答