좋습니다. 원격 서버(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>
stdout에 다음을 기록합니다.
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
.
작성된 대로 위의 코드는 변수를 정의하지만 내보내지는 않습니다. 이 문제를 해결할 수 있지만 아래 코드가 더 안전하고 내보내기를 수행합니다.
소스 명령인 .
은 파일을 인수로 예상합니다. 의 출력을 rhc
파일류 객체로 변환하려면 다음을 사용합니다.프로세스 대체: <(...)
.
보안을 강화하려면 다음을 사용하세요.
while read -r line; do declare -x "$line"; done < <(rhc env list -a <app-name>)
여기서는 <(...)
입력 리디렉션과 결합된 프로세스 대체를 사용하여 <
루프 while
가 의 출력에서 읽습니다 rhc
. 첫 번째와 두 번째 사이의 공간은 <
필수적입니다.~ 아니다생략하세요.
bash에게 다음을 지시 -x
하는 옵션declare
내보내다변수.
순서 변경
아래 설명에 따라 rhc
명령은 다음을 통해 루프 위의 줄에 배치될 수 있습니다 while
.
tmpvar=$(rhc env list -a <app-name>)
while read -r line; do declare -x "$line"; done <<<"$tmpvar"
<<<
생성여기 문자열. 이 경우 이는 루프 $tmpvar
에 대한 입력으로 제공된다는 의미입니다 while
.