Eu tenho o seguinte em um script
for server in ${servers[@]}; do
echo ${server}
ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done"
done
Mas isso não funciona. Estranho, vejo $ I quantidade de linhas de retorno. Portanto, se eu tiver dez arquivos, vejo dez linhas em branco.
--sshlogin
.Respostas:
Seu shell local interpreta as
${i}
aspas duplas ("
), então o comando funciona paraBasta usar aspas simples (
'
) e seu problema desaparecerá:fonte
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 puxando 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.
fonte
Eu atualizei a resposta acima para obter portas de uma lista também.
fonte