lokale Variable ist innerhalb des SSH-Blocks nicht zugänglich

lokale Variable ist innerhalb des SSH-Blocks nicht zugänglich
#!/bin/sh
flag="False"
ssh -n  $Domain_1@$IP "$( cat <<'EOT'
$flag="True"
cat << 'EOT'
)"

Flag ist gleich „false“, bevor eine Verbindung zum Remote-Standort hergestellt wird. Ich möchte lediglich den Wert von Flag innerhalb des SSH-Blocks ändern, nachdem ich eine Operation am Remote-Standort ausgeführt habe, und den Wert von Flag an meine lokale Variable Flag zurückgeben. –

Antwort1

Ich nehme an, Sie wollen etwas in der Art von

#!/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
)

Dies würde das als zitiertes Here-Dokument angegebene Skript auf dem Remote-Host ausführen und seine Ausgabe würde der lokalen Variable zugewiesen flag. So wie ich es hier geschrieben habe, gehe ich davon aus, dass das some operationsBitnichtkeine Ausgabe erzeugen, sondern dass die einzige vom Remote-Skript erzeugte Ausgabe von einem der beiden bedingten echoBefehle stammt.

Ihrer flagVariablen wird, abhängig vom Ergebnis von , die Zeichenfolge trueoder zugewiesen .falsesome_condition

Wenn Sie den Wert im Remote-Skript verwenden müssen $flag, müssen Sie ein nicht in Anführungszeichen gesetztes Here-Dokument verwenden. Sie müssen dann darauf achten, dass Sie alle Shell-Erweiterungen, die remote ausgeführt werden sollen, ordnungsgemäß maskieren (indem Sie diese $als maskieren \$).

verwandte Informationen