Em resumo, use:
- palavras-chave heredoc não citadas, por exemplo,
EOF
- char regular em dólar para variáveis externas ( por exemplo, locais ), por exemplo,
$FOO
- caractere de escape de dólar para variáveis internas ( por exemplo, remotas ), por exemplo
\$BAR
Se você deixar a palavra-chave heredoc (ou seja EOF
) sem aspas, o corpo do heredoc será processado localmente, para que ele $FOO
seja expandido foo
e BAR
expandido para a cadeia vazia. Então seu ssh
comando se torna:
BAR="bar"
echo "FOO=foo"
echo "BAR="
Se você citar a palavra-chave heredoc, a expansão da variável será suprimida, para que seu ssh
comando se torne este:
BAR="bar"
echo "FOO=$FOO"
echo "BAR=$BAR"
Como FOO
provavelmente não está definido no ambiente remoto do shell, a expressão "FOO=$FOO"
é avaliada como "FOO=''"
, ou seja, FOO
é definida como a sequência vazia.
Se você deseja usar as duas variáveis, precisará 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 você deseja expandir remotamente, ou seja, :
#!/bin/sh
FOO="foo"
ssh some.remote.host << EOF
BAR="bar"
echo "FOO=$FOO"
echo "BAR=\$BAR"
EOF
Nesse caso, seu comando ssh (conforme recebido pelo servidor remoto) será o seguinte:
BAR="bar"
echo "FOO=foo"
echo "BAR=$BAR"