локальная переменная недоступна внутри блока ssh

локальная переменная недоступна внутри блока ssh
#!/bin/sh
flag="False"
ssh -n  $Domain_1@$IP "$( cat <<'EOT'
$flag="True"
cat << 'EOT'
)"

flag равен false перед подключением к удаленному расположению. Я просто хочу изменить значение flag внутри блока ssh после выполнения некоторой операции в удаленном расположении и вернуть значение flag в мою локальную переменную flag. –

решение1

Я предполагаю, что вы хотите сделать что-то в духе

#!/bin/sh

flag=$(
    ssh -T "$user@$host" <<'END_SCRIPT'
        # some operations on
        # the remote host goes here

        # later...

        if some_condition; then
            echo true
        else
            echo false
        fi
END_SCRIPT
)

Это выполнит скрипт, заданный как цитируемый here-document на удаленном хосте, и его вывод будет назначен локальной переменной flag. В том виде, в котором я это написал, я предполагаю, что бит some operationsделаетнетне производит никаких выходных данных, а вместо этого единственный выходной сигнал, создаваемый удаленным скриптом, поступает от одной из двух условных echoкоманд.

Вашей flagпеременной будет присвоена строка trueили falseв зависимости от результата some_condition.

Если вам нужно использовать значение $flagвнутри удаленного скрипта, вам придется использовать некавычный here-document. Затем следует позаботиться о том, чтобы правильно экранировать любые расширения оболочки, которые вы хотите, чтобы выполнялись удаленно (экранируя их $как \$).

Связанный контент