有人可以帮我强迫这个脚本工作吗
IFLOAD=`ssh root@$REMOTE_HOST 'awk '\''/$IFACE/ {i++; rx[i]=\$2; tx[i]=\$10}; END{print rx[2]-rx[1] " " tx[2]-tx[1]}'\'' <(cat /proc/net/dev; sleep 1; cat /proc/net/dev)'
echo "$IFLOAD"
现在它返回
0 0
但是在$ 2和$ 10列上,我有一个带有IFACE rx和tx字节的真实数据。没有ssh,这个脚本运行正常,正如我所见。
或许您可以通过ssh获得更简单的方法来获取当前的交互负载量。
答案 0 :(得分:1)
首先,让我们稍微简化awk
命令,然后再担心如何通过ssh
传递它。
awk_script='
ifc ~ $1 {
i++;
rx[i]=$2;
tx[i]=$10
};
END {
print rx[2]-rx[1] " " tx[2] - tx[1]
}
'
awk -v ifc="$IFACE" "$awk_script" <(cat /proc/dev/net; sleep 1; cat /proc/dev/net)
将IFACE
作为awk
变量传递,可以将整个awk
脚本括在一个单引号字符串中。只要我们对扩展进行双重引用,它就会按预期工作。
现在通过ssh
发送它应该相对简单:
IFLOAD=$(ssh root@$REMOTE_HOST "awk -v ifc='$IFACE' '$awk_script' <(cat /proc/dev/net; sleep 1; cat /proc/dev/net)")
注意整个命令行是一个双引号字符串。这意味着$IFACE
和$awk_script
将在本地展开。但是,该字符串在扩展周围使用单引号,因此当整个事物发送到远程shell时,每个值都被视为单引号字符串,并且不会被远程shell错误地处理。