我试图从perl脚本在远程主机上执行命令。
$check = `rsh host1 "df -k /backup/|tail -1|awk \'{print \$5}\'"`;
print $check
但是awk会返回整个字符串而不是一列。
/dev/md/dsk/d10 4133838 1936684 2155816 48% /
我只需要
48%
看起来有一个问题在逃避,但不知道究竟是什么错误。请帮忙。
答案 0 :(得分:3)
一种选择是将qx
与单引号一起用作分隔符,以便不插入Perl变量:
$check = qx'rsh host1 "df -k /backup/|tail -1|awk \"{print \$5}\""';
我在awk命令周围使用了双引号,因此仍然需要转义$5
以防止它被解释为shell变量。
如果您愿意在本地计算机上运行tail
和awk
,则可以删除双引号:
$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];