私のスクリプトには次のものがあります
for server in ${servers[@]}; do
echo ${server}
ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done"
done
しかし、これはうまくいきません。奇妙なことに、$ I金額の返品ラインが表示されます。したがって、10個のファイルがある場合は、10個の空白行が表示されます。
答え1
ローカルシェルは${i}
二重引用符()"
内の内容を解釈するため、このコマンドの結果は次のとおりです。
ssh [email protected] "for i in /tmp/foo* ; do echo; done"
一重引用符('
)のみを使用すると問題が消えます。
ssh user@${server} 'for i in /tmp/foo* ; do echo $i; done'
答え2
私はこの問題を発見しました。提供されたソリューションは機能しますが、sshの前に繰り返す配列を生成するローカルシェルから変数を抽出する場合は、あまり効率的ではありません。少し混乱しているのは、最初は$をエスケープすることです。
"for i in /tmp/foo* ; do echo \${i}; done"
これは、呼び出す ssh シェルではなくローカル構成でエスケープされます。
答え3
また、リストからポートを取得するために上記の回答を更新しました。
for i in {10.21.xxx.yyy,10.21.xxx.yyy,10.23.xxx.yyy};
do
for j in {5501,5502,5503,5504,7701,7702,7703,7704,5551,5552,5553,7771,7772,7773};
do
(echo > /dev/tcp/${i}/${j}) > /dev/null 2>&1 && echo "${i}:${j} :: it's getting connected" || echo "${i}:${j} :: it's not connecting"
done
done