글쎄, 일부 미러링된 원격 서버(OpenShift 서버)의 로컬 환경 변수를 하드코딩하는 대신 프로그래밍 방식으로 수행하여 모든 것을 수동으로 최신 상태로 유지할 필요가 없도록 하고 싶습니다.
이제 파일에 하드코딩했습니다.
#!/usr/bin/env bash
export OPENSHIFT_MONGODB_DB_USERNAME="admin"
export OPENSHIFT_MONGODB_DB_PASSWORD="xyz"
export OPENSHIFT_MONGODB_DB_HOST="emsa-xyz-2-emsa.cloudapps.nabisco.com"
export OPENSHIFT_MONGODB_DB_PORT=60161
하드코딩 대신 다음을 사용하여 OpenShift에서 "공용" 환경 변수를 검색할 수 있습니다.
rhc env list -a <app-name>
이것을 표준 출력에 쓰세요:
NODE_ENV=jailbreak
NPM_CONFIG_PRODUCTION=true
OPENSHIFT_MONGODB_DB_HOST=emsa-xyz-2-emsa.cloudapps.nabisco.com
OPENSHIFT_MONGODB_DB_PASSWORD=xyz
OPENSHIFT_MONGODB_DB_PORT=60161
OPENSHIFT_MONGODB_DB_USERNAME=admin
표준 출력을 얻은 다음 각 변수를 내보내는 방법을 아는 사람이 있습니까?
나는 이것이 다음과 같을 것이라고 생각했습니다. 각 줄을 가져와서 export
그 앞에 놓고 실행하십시오 bash -e "export x"
. 질문은 하위 쉘에서 실행하고 현재 쉘에 영향을 미치지 않는 것이 가능합니까?
이 질문에 대한 기존 답변은 훌륭하므로 잃어버려서는 안 됩니다.
답변1
rhc 명령의 출력을 신뢰한다면 직접 얻을 수 있습니다:
. <(rhc env list -a <app-name>)
생성된 모든 행을 가져오거나 실행합니다 rhc
.
작성된 대로 위 코드는 변수를 정의하지만 내보내지는 않습니다. 이 문제를 해결할 수 있지만 아래 코드가 더 안전하고 내보낼 수 있습니다.
source 명령에는 .
파일이 인수로 필요합니다. 의 출력을 rhc
파일류 객체로 변환하려면 다음을 사용합니다.프로세스 교체: <(...)
.
보안을 강화하려면 다음을 사용하세요.
while read -r line; do declare -x "$line"; done < <(rhc env list -a <app-name>)
여기서는 루프가 의 출력에서 읽을 수 있도록 <(...)
입력 리디렉션과 결합된 프로세스 대체를 사용합니다 . 첫 번째와 두 번째 사이의 공간은 매우 중요합니다.<
while
rhc
<
아니요생략하세요.
-x
declare
bash 옵션 알려주기출구변하기 쉬운.
주문 변경
아래 설명에 따르면 rhc
명령은 while
다음과 같은 방법으로 루프 위 줄에 배치될 수 있습니다.
tmpvar=$(rhc env list -a <app-name>)
while read -r line; do declare -x "$line"; done <<<"$tmpvar"
<<<
만들다여기에 있는 문자열. 이 경우 루프에 대한 입력 $tmpvar
으로 제공된다는 의미입니다.while