SSH 블록 내에서 지역 변수에 액세스할 수 없습니다.

SSH 블록 내에서 지역 변수에 액세스할 수 없습니다.
#!/bin/sh
flag="False"
ssh -n  $Domain_1@$IP "$( cat <<'EOT'
$flag="True"
cat << 'EOT'
)"

원격 위치에 연결하기 전에 플래그는 false와 같습니다. 원격 위치에서 일부 작업을 수행한 후 ssh 블록 내부의 플래그 값을 변경하고 플래그 값을 내 로컬 변수 플래그로 반환하고 싶습니다. –

답변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할당됩니다 .truefalsesome_condition

원격 스크립트 내에서 값을 사용해야 하는 경우 $flag인용되지 않은 here-document를 사용해야 합니다. 그런 다음 원격으로 발생하려는 셸 확장을 적절하게 이스케이프하도록 주의를 기울여야 합니다(이를 $로 이스케이프하여 \$).

관련 정보