Eu tenho o seguinte em um script
for server in ${servers[@]}; do
echo ${server}
ssh [email protected]${server} "for i in /tmp/foo* ; do echo ${i}; done"
done
Mas isso não funciona. Estranho, vejo $ I quantidade de linhas de retorno. Então, se eu tiver dez arquivos, vejo dez linhas em branco.
Seu Shell local interpreta o ${i}
entre aspas duplas ("
), então o comando funciona para
ssh [email protected] "for i in /tmp/foo* ; do echo; done"
Basta usar aspas simples ('
) e seu problema desaparecerá:
ssh [email protected]${server} 'for i in /tmp/foo* ; do echo $i; done'
Acabei de encontrar esse problema um pouco atrás, e a solução fornecida, embora funcione, não será muito eficaz se você também estiver obtendo variáveis do Shell local, antes do ssh, você cria uma matriz para iterar. Um pouco mais confuso seria apenas escapar do $ inicialmente, então seria
"for i in /tmp/foo* ; do echo \${i}; done"
O que escaparia dentro da construção local, não do chamado ssh Shell.
Eu atualizei a resposta acima para obter portas de uma lista também.
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