Se você deixar a palavra-chave heredoc (ou seja, EOF
) sem aspas, o corpo heredoc será processado localmente, de modo que $FOO
seja expandido para foo
e BAR
seja expandido para a cadeia vazia. Então seu comando ssh
se torna:
BAR="bar"
echo "FOO=foo"
echo "BAR="
Se você citar a palavra-chave heredoc, a expansão de variáveis será suprimida, de modo que o comando ssh
se torne o seguinte:
BAR="bar"
echo "FOO=$FOO"
echo "BAR=$BAR"
Como FOO
provavelmente não está definido no ambiente de shell remoto, a expressão "FOO=$FOO"
é avaliada como "FOO=''"
, ou seja, FOO
é definida como a string vazia.
Se você quiser usar as duas variáveis, será necessário deixar a palavra-chave heredoc sem aspas, para que a expansão da variável ocorra para a variável definida localmente e, em seguida, escape (com uma barra invertida) a variável que deseja expandir remotamente, ou seja:
#!/bin/sh
FOO="foo"
ssh some.remote.host << EOF
BAR="bar"
echo "FOO=$FOO"
echo "BAR=\$BAR"
EOF
Neste caso, seu comando ssh (como recebido pelo servidor remoto) será o seguinte:
BAR="bar"
echo "FOO=foo"
echo "BAR=$BAR"