如何获取 ssh awk 远程值

如何获取 ssh awk 远程值

我正在使用这个脚本

[test@sys-master ~]$ parallel -k -j 100 sshpass -p test1213'!' ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -q [email protected].{}  "cat /proc/loadavg | awk -F \" \"  '{ print   a,\$1,b }' a="'"$(hostname)"'" b=\$(nproc)" ::: {41..46}.{1..100}

为什么要返回本地值?我需要远程(节点)值

 sys-master 9.87 24
    sys-master 9.99 24
    sys-master 11.85 24
    sys-master 11.67 24
    sys-master 10.75 24
    sys-master 8.00 24
    sys-master 10.27 24
    sys-master 11.94 24
    sys-master 10.28 24
    sys-master 10.94 24
    sys-master 12.02 24
    sys-master 9.55 24
    sys-master 11.43 2

答案1

这是由于引用。

GNU Parallel 不是 shell 的一部分,因此每个输入如果要被 shell 解释就必须加引号。由于您从 shell(将解释输入)调用 GNU Parallel 并且 GNU Parallel 启动一个 shell(解释输入),因此它必须被引用两次,除非您使用-q,只有当您需要完整的行时才可以使用它。被引用(即没有组合命令)。

正如你所知,它很快就会变得混乱。 :)

所以一般建议是定义一个 bash 函数并调用它。

myloadavg() {
  sshpass -p test1213'!' ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -q [email protected].$1  "cat /proc/loadavg | awk -F \" \"  '{ print   a,\$1,b }' a="'"\$(hostname)"'" b=\$(nproc)"
}
export -f myloadavg
parallel myloadavg ::: {41..46}.{1..100}

相关内容