Передача локальной переменной в скрипт удаленной оболочки bash
Попытка передать локальную переменную в удаленную оболочку с помощью скрипта bash. Вот что я пытаюсь Это test.sh
#!/bin/bash
envi=$1
function samplefunction {
echo "Environment selected is $envi"
}
if [ "$envi" = "test" ]; then
ssh user@remotehost <<EOF
$(typeset -f samplefunction)
samplefunction
EOF
else
echo "Please pass correct parameter which is - test"
fi
Когда я пытаюсь выполнить "./test.sh test", я получаю результат "Environment selected is". Оболочка не может передать переменную в удаленную систему.
1 ответ
ssh
не делает (и не может) сделать такие переменные доступными на удаленной стороне.
Вместо этого вы можете встраивать определение так же, как встраивали свою функцию:
ssh user@remotehost <<EOF
$(declare -p envi)
$(typeset -f samplefunction)
samplefunction
EOF
Вы также можете скопировать все известные переменные. В этом случае это помогает устранить ошибки, связанные с установкой значений только для чтения:
ssh user@remotehost <<EOF
{
$(declare -p)
} 2> /dev/null
$(typeset -f samplefunction)
samplefunction
EOF
Если у вас есть определенная переменная, которую вы часто хотите копировать, вы можете выбрать ssh
отправить его автоматически, добавив SendEnv envi
к вашей конфигурации SSH. Переменная должна быть экспортирована, чтобы это работало.