このスクリプトを使用しています
[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がシェル(入力の解釈)を開始するため、使用しない限り2回引用する必要があります。これは、-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}