我想找出远程机器上/ 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`;
任何想法如何解决此问题?
答案 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。