Linux

如何獲取 ssh awk 遠端值

  • January 21, 2022

我正在使用這個腳本

[test@sys-master ~]$ parallel -k -j 100 sshpass -p test1213'!' ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -q root@10.0.{}  "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

這是由於引用。

GNU Parallel 不是 shell 的一部分,因此如果 shell 解釋每個輸入,則必須引用它。並且由於您從 shell 呼叫 GNU Parallel(它將解釋輸入)並且 GNU Parallel 啟動一個 shell(解釋輸入)它必須被引用兩次,除非您使用-q,您只能在需要完整行時使用它被引用(即沒有組合命令)。

正如您可以說的那樣,它很快就會變得混亂。:)

所以一般建議是定義一個 bash 函式並呼叫它。

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

引用自:https://unix.stackexchange.com/questions/687261