3

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

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

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

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

我只需要

48%

看起来逃跑有问题,但不知道到底出了什么问题。请帮忙。

4

1 回答 1

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];
于 2014-12-29T09:54:55.837 回答