Estoy intentando pasar una variable env a un host remoto usando el siguiente código.
ssh username@ip "env current_quarter=$current_quarter" sh -s << 'EOF'
pwd
echo "${current_quarter}"
EOF
pwd
imprime la ubicación correcta en el host remoto pero echo "${current_quarter}"
no imprime el trimestre_actual.
Respuesta1
Al poner EOF
comillas, le está indicando al shell local que no expanda el documento aquí antes de pasarlo a ssh. De acuerdo con ladocumentación de bashesto se aplica a la expansión de parámetros, la sustitución de comandos y la expansión aritmética.
Al contrario de lo que pensé cuando escribí originalmente esta respuesta, el shell remoto no se ve afectado por esto y ejecutará el documento aquí como lo escribió directamente en el shell remoto (incluidos todos los tipos de expansión y sustitución que se omitieron en el shell local por citando EOF
).
Si solo desea utilizar la variable local, test
elimine las comillas del EOF:
ssh user@host sh -s <<EOF
pwd
echo $test
EOF
Para los usuarios de pescado, se vería así:
ssh user@host "\
pwd
echo $test
"
Ahora, si desea pasar la variable local test
como variable remota remote_test
y no expandirla localmente, simplemente escape la variable con una barra invertida:
ssh user@host sh -s <<EOF
export remote_test=$test
pwd
echo "\${remote_test}"
EOF
Editar:
Correr:
ssh user@host "env remote_test=$test" sh -s <<'EOF'
pwd
echo "${remote_test}"
EOF
debería ser equivalente al tercer ejemplo de código con la excepción de que env
no forma parte del shell y también se puede utilizar en shells que no sean bourne.
(Sin embargo, esto es idéntico al ejemplo de código que dio OP, pero dado que OP marcó esta respuesta como correcta, sospecho que env y export se comportan de manera diferente cuando encuentran ciertas secuencias de caracteres, pero no he encontrado evidencia concluyente que respalde esta hipótesis).