SSH를 통해 env 변수 전달

SSH를 통해 env 변수 전달

아래 코드를 사용하여 remoye 호스트에 env 변수를 전달하려고 합니다.

ssh username@ip "env current_quarter=$current_quarter" sh -s << 'EOF' 
pwd 
echo "${current_quarter}" 
EOF

pwd원격 호스트의 올바른 위치를 인쇄하지만 echo "${current_quarter}"current_quarter는 인쇄하지 않습니다.

답변1

따옴표를 넣으면 EOF여기 문서를 ssh에 전달하기 전에 확장하지 않도록 로컬 셸에 지시하게 됩니다. 에 따르면배쉬 문서이는 매개변수 확장, 명령 대체 및 산술 확장에 적용됩니다.

이 답변을 처음 작성할 때 생각했던 것과는 달리 원격 셸은 이에 영향을 받지 않으며 원격 셸에서 직접 작성한 것처럼 여기 문서를 실행합니다(로컬 셸에서 건너뛴 모든 종류의 확장 및 대체 포함). 인용 EOF).

지역 변수만 사용하려면 testEOF에서 따옴표를 제거하세요.

ssh user@host sh -s <<EOF
pwd
echo $test
EOF

물고기 사용자의 경우 다음과 같습니다.

ssh user@host "\
pwd
echo $test
"

test이제 로컬 변수를 원격 변수로 전달하고 로컬로 확장하지 않으려면 remote_test백슬래시를 사용하여 변수를 이스케이프하면 됩니다.

ssh user@host sh -s <<EOF
export remote_test=$test
pwd
echo "\${remote_test}"
EOF

편집하다:

달리기:

ssh user@host "env remote_test=$test" sh -s <<'EOF'
pwd
echo "${remote_test}"
EOF

env셸의 일부가 아니며 Bourne 셸이 아닌 경우에도 사용할 수 있다는 점을 제외하면 세 번째 코드 예제와 동일해야 합니다 .

(그러나 이것은 OP가 제공한 코드 예제와 동일하지만 OP가 이 답변을 올바른 것으로 표시했기 때문에 특정 문자 시퀀스를 만날 때 env와 내보내기가 다르게 동작하는 것으로 의심되지만 이 가설을 뒷받침하는 결정적인 증거를 찾지 못했습니다.)

관련 정보