Передача локальной переменной в скрипт удаленной оболочки bash - PullRequest
0 голосов
/ 08 мая 2018

Попытка передать локальную переменную в удаленную оболочку с помощью 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 Ответ

0 голосов
/ 08 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...