我正在尝试从 perl 脚本在远程主机上执行命令。
$check = `rsh host1 "df -k /backup/|tail -1|awk \'{print \$5}\'"`;
print $check
但是 awk 会返回整个字符串而不是一列。
/dev/md/dsk/d10 4133838 1936684 2155816 48% /
我只需要
48%
看起来逃跑有问题,但不知道到底出了什么问题。请帮忙。
一种选择是使用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];