La lista de variables de entorno aceptadas en SSHD por defecto incluye LC_* . Así:
LC_MY_BUILDN="1.2.3" ssh -o "SendEnv LC_MY_BUILDN" ssh-host 'echo $LC_MY_BUILDN'
1.2.3
Las variables entre comillas simples no se evalúan. Utilice comillas dobles:
ssh example@unixlinux.online "~/tools/run_pvt.pl $BUILD_NUMBER"
El shell expandirá las variables entre comillas dobles, pero no entre comillas simples. Esto cambiará a la cadena deseada antes de pasar al ssh comando.
Si usas
ssh example@unixlinux.online "~/tools/run_pvt.pl $BUILD_NUMBER"
en lugar de
ssh example@unixlinux.online '~/tools/run_pvt.pl $BUILD_NUMBER'
su shell interpolará el $BUILD_NUMBER antes de enviar la cadena de comando al host remoto.
(Esta respuesta puede parecer innecesariamente complicada, pero es fácilmente extensible y robusta con respecto a los espacios en blanco y los caracteres especiales, hasta donde yo sé).
Puede alimentar datos directamente a través de la entrada estándar del ssh comando y read eso desde la ubicación remota.
En el siguiente ejemplo,
- una matriz indexada se llena (por conveniencia) con los nombres de las variables cuyos valores desea recuperar en el lado remoto.
- Para cada una de esas variables, le damos a
sshuna línea terminada en nulo que proporciona el nombre y el valor de la variable. - En el
shhcomando en sí mismo, recorremos estas líneas para inicializar las variables requeridas.
# Initialize examples of variables.
# The first one even contains whitespace and a newline.
readonly FOO=$'apjlljs ailsi \n ajlls\t éjij'
readonly BAR=ygnàgyààynygbjrbjrb
# Make a list of what you want to pass through SSH.
# (The “unset” is just in case someone exported
# an associative array with this name.)
unset -v VAR_NAMES
readonly VAR_NAMES=(
FOO
BAR
)
for name in "${VAR_NAMES[@]}"
do
printf '%s %s\0' "$name" "${!name}"
done | ssh example@unixlinux.online '
while read -rd '"''"' name value
do
export "$name"="$value"
done
# Check
printf "FOO = [%q]; BAR = [%q]\n" "$FOO" "$BAR"
'
Salida:
FOO = [$'apjlljs ailsi \n ajlls\t éjij']; BAR = [ygnàgyààynygbjrbjrb]
Si no necesita export esos, deberías poder usar declare en lugar de export .
Una versión realmente simplificada (si no necesita la extensibilidad, tiene una sola variable para procesar, etc.) se vería así:
$ ssh example@unixlinux.online 'read foo' <<< "$foo"