SSH 명령을 로컬로 실행할 때 원격 컴퓨터의 환경 변수를 참조하는 방법은 무엇입니까?

SSH 명령을 로컬로 실행할 때 원격 컴퓨터의 환경 변수를 참조하는 방법은 무엇입니까?

원격 서버(Cent OS 7)에서 명령을 실행하고 해당 서버에 정의된 환경 변수를 사용하고 싶습니다. 그러나 이 명령을 실행하면

ssh [email protected] "PGPASSWORD=$DB_PASS psql -U $DB_USER -d $DB_NAME -c 'COPY myapp_currencyprice to STDOUT WITH (DELIMITER \",\", FORMAT CSV, HEADER)' > /tmp/prices.csv"

명령이 "remotehost.com"이 아닌 localhost의 "$DB_PASS" 및 기타 환경 변수를 사용하려는 것 같습니다. 원격 서버에서 환경 변수를 참조하는 올바른 방법은 무엇입니까?

답변1

로컬 셸이 문자열을 가져오는 것을 방지하려면 작은따옴표를 사용해야 합니다.

ssh [email protected] 'stuff here...'

그런 다음 내부 따옴표를 바꿔야 합니다.

ssh [email protected] 'PGPASSWORD=$DB_PASS psql -U $DB_USER -d $DB_NAME -c "COPY myapp_currencyprice to STDOUT WITH (DELIMITER \",\", FORMAT CSV, HEADER)" > /tmp/prices.csv'

.bash_profile그러나 대화형 셸을 사용하지 않기 때문에 포함되지 않으므로 여전히 작동하지 않습니다 . 이 시점에서 가장 확실한 해결책은 이를 명시적으로 포함하는 것입니다.

ssh [email protected] '. .bash_profile; PGPASSWORD=$DB_PASS psql -U $DB_USER -d $DB_NAME -c "COPY myapp_currencyprice to STDOUT WITH (DELIMITER \",\", FORMAT CSV, HEADER)" > /tmp/prices.csv'

다양한 유형의 인용문 간의 차이점을 이해하려면 이 두 가지 참고 자료를 찾아보세요.

답변2

(댓글은 terdon이 제안한 답변으로 변환되었습니다 ...)

로컬 확장을 방지하려면 $ 기호를 이스케이프 처리해 보세요. 좋다

"PGPASSWORD=\$DB_PASS psql -U \$DB_USER -d $DB_NAME ..."

귀하의 의견에서 언급했듯이 정확히 작동하지 않는 것은 무엇입니까? 또한 명령을 작은따옴표로 묶었나요? 둘 중 하나를 선택하세요.

관련 정보