En resumen, use:
- palabras clave heredoc no citadas, por ejemplo,
EOF
- dólar regular char para variables externas (es decir, locales ), por ejemplo,
$FOO
- dólar escapado para variables internas (es decir, remotas ), por ejemplo
\$BAR
Si deja la palabra clave heredoc (es decir EOF
) sin comillas, el cuerpo heredoc se procesa localmente, de modo que $FOO
se expande foo
y BAR
se expande a la cadena vacía. Entonces su ssh
comando se convierte en:
BAR="bar"
echo "FOO=foo"
echo "BAR="
Si cita la palabra clave heredoc, se suprime la expansión variable, de modo que su ssh
comando se convierte en esto:
BAR="bar"
echo "FOO=$FOO"
echo "BAR=$BAR"
Dado FOO
que probablemente no está definido en el entorno de shell remoto, la expresión "FOO=$FOO"
se evalúa como "FOO=''"
, FOO
es decir, se establece en la cadena vacía.
Si desea utilizar ambas variables, deberá dejar la palabra clave heredoc sin comillas, para que la expansión de la variable tenga lugar para la variable definida localmente, y luego escapar (con una barra invertida) la variable que desea expandir de forma remota, es decir :
#!/bin/sh
FOO="foo"
ssh some.remote.host << EOF
BAR="bar"
echo "FOO=$FOO"
echo "BAR=\$BAR"
EOF
En este caso, su comando ssh (tal como lo recibe el servidor remoto) será el siguiente:
BAR="bar"
echo "FOO=foo"
echo "BAR=$BAR"