Передача локальной переменной в скрипт удаленной оболочки 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. Переменная должна быть экспортирована, чтобы это работало.

Другие вопросы по тегам