En bref, utilisez:
- des mots clés hérédoc non cités, par exemple,
EOF
- caractère en dollars réguliers pour les variables externes (c.-à-d. locales ), p. ex.
$FOO
- caractère dollar échappé pour les variables internes (c'est-à-dire distantes ), par exemple
\$BAR
Si vous laissez le mot clé heredoc (c.-à-d. EOF
) Sans guillemets, le corps heredoc est traité localement, de sorte qu'il $FOO
est étendu à foo
et BAR
est étendu à la chaîne vide. Votre ssh
commande devient alors:
BAR="bar"
echo "FOO=foo"
echo "BAR="
Si vous citez le mot clé heredoc, l'expansion des variables est supprimée, de sorte que votre ssh
commande devienne celle-ci à la place:
BAR="bar"
echo "FOO=$FOO"
echo "BAR=$BAR"
Étant donné que FOO
n'est probablement pas défini dans l'environnement shell distant, l'expression "FOO=$FOO"
est évaluée comme "FOO=''"
, c'est FOO
-à- dire est définie sur la chaîne vide.
Si vous souhaitez utiliser les deux variables, vous devrez laisser le mot-clé heredoc sans guillemets, afin que l'expansion de variable ait lieu pour la variable définie localement, puis échapper (avec une barre oblique inverse) la variable que vous souhaitez développer à distance, c'est-à-dire :
#!/bin/sh
FOO="foo"
ssh some.remote.host << EOF
BAR="bar"
echo "FOO=$FOO"
echo "BAR=\$BAR"
EOF
Dans ce cas, votre commande ssh (telle que reçue par le serveur distant) sera la suivante:
BAR="bar"
echo "FOO=foo"
echo "BAR=$BAR"