원격 서버(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 ..."
귀하의 의견에서 언급했듯이 정확히 작동하지 않는 것은 무엇입니까? 또한 명령을 작은따옴표로 묶었나요? 둘 중 하나를 선택하세요.