从perl脚本用awk远程shell调用

时间:2014-12-29 09:24:28

标签: perl shell awk rsh

我试图从perl脚本在远程主机上执行命令。

$check = `rsh host1 "df -k /backup/|tail -1|awk \'{print \$5}\'"`;
print $check

但是awk会返回整个字符串而不是一列。

/dev/md/dsk/d10      4133838 1936684 2155816    48%    /

我只需要

48%

看起来有一个问题在逃避,但不知道究竟是什么错误。请帮忙。

1 个答案:

答案 0 :(得分:3)

一种选择是将qx与单引号一起用作分隔符,以便不插入Perl变量:

$check = qx'rsh host1 "df -k /backup/|tail -1|awk \"{print \$5}\""';

我在awk命令周围使用了双引号,因此仍然需要转义$5以防止它被解释为shell变量。

如果您愿意在本地计算机上运行tailawk,则可以删除双引号:

$check = qx'rsh host1 df -k /backup/|tail -1|awk "{print \$5}"';

这会导致从远程计算机复制更多数据,这可能是也可能不是问题。

或者,您可以使用Perl拆分输出并完全避免问题:

$check = (split /\s+/, qx'rsh host1 "df -k /backup/|tail -1"')[4];