Eu tenho esse 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ê?
Responder1
HOSTSN está vazio porque está sendo avaliado no momento do
do ssh -tt ${USERNAME}@${hostname} << EOF
execução. Usar echo \${HOSTSN}
em vez disso irá consertar 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
$