Bash изменить значение переменной на удаленном сервере (с ssh) и использовать его на моем локальном сервере - PullRequest
0 голосов
/ 02 ноября 2019

Мне нужно выполнить некоторые операции на моем удаленном сервере (нацеленные через ssh) и использовать результат на моем локальном сервере. Я знаю, как выполнить операцию локально и использовать ее удаленно, но я не нашел способа выполнить обратную операцию.

например:

ssh my_remote_server '
   echo "==> ${PWD}"
   ERROR=3
   echo "==> ${ERROR}"
   MYERROR=$((ERROR + 1))     or    'MYERROR'=$((ERROR + 1))
   echo "===> ${MYERROR}"
'
echo "### ${MYERROR}"

полученный результат:

==> /home/toto
==> 3
===> 4
###

Ожидаемый результат:

==> /home/toto
==> 3
===> 4
### 4

Кто-нибудь знает, как я могу использовать MYERROR локально?

1 Ответ

3 голосов
/ 02 ноября 2019

Избавьтесь от всех других повторений в сценарии, который вы отправляете, и просто сделайте так, чтобы оно повторяло новое значение. Затем вы можете назначить вывод ssh для локальной переменной.

myerror=$(ssh -T my_remote_server <<'EOF'
error=3
myerror=$((error + 1))
echo "$myerror"
EOF
)
echo "### $myerror"

Если вам нужно несколько переменных, вы можете использовать сценарий для назначения переменных эха, а затем использовать eval

eval "$(ssh -T my_remote_server <<'EOF'
echo 'echo "==> ${PWD}"'
error=6
echo 'echo "==> ${error}"'
myerror=$((error + 1))
echo 'echo "===> ${myerror}"'
echo "myerror='$myerror'"
x=2
y=$((x * 3))
echo "y='$y'"
EOF
)"
echo "### $myerror"
echo "### $y"

Кстати, избавьтесь от привычки использовать все заглавные буквы. По соглашению эти имена зарезервированы для переменных среды.

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