이 스크립트를 사용하고 있습니다
[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은 셸의 일부가 아니므로 셸에서 해석하려면 각 입력을 따옴표로 묶어야 합니다. 쉘(입력을 해석할)에서 GNU Parallel을 호출하고 GNU Parallel이 쉘(입력을 해석할)을 시작하므로 사용하지 않는 한 두 번 인용해야 합니다. 이는 -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}