Atribui um valor a uma variável dentro de um loop

1

Eu tenho este código:

HOSTS="host1 host2"
    For hostname in ${HOSTS} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
HOSTSN="test"
echo ${HOSTSN}
exit
EOF
Done 

A variável HOSTSN está vazia, você pode me dizer por quê?

    
por Issam 27.10.2016 / 11:27

1 resposta

1

O HOSTSN está vazio porque está sendo avaliado no momento da

do ssh -tt ${USERNAME}@${hostname} << EOF

execução. O uso de echo \${HOSTSN} corrigirá o problema.

Considere este exemplo. Aqui um arquivo 'foo' é criado. O conteúdo não é executado no momento da criação do arquivo. Portanto, $NAME não está definido para nada.

$ cat >foo <<EOF
NAME=Steve
echo Hello ${NAME}
EOF
$

$ cat foo
Hello
$

Ao introduzir um caractere \ , a variável não é avaliada no momento da criação do arquivo.

$ cat >foo <<EOF
NAME=Steve
echo Hello \${NAME}
EOF
$

$ cat foo
Hello Steve
$
    
por 27.10.2016 / 11:34