명령의 표준 출력을 통해 프로그래밍 방식으로 환경 변수 내보내기

명령의 표준 출력을 통해 프로그래밍 방식으로 환경 변수 내보내기

글쎄, 일부 미러링된 원격 서버(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>)

여기서는 루프가 의 출력에서 ​​읽을 수 있도록 <(...)입력 리디렉션과 결합된 프로세스 대체를 사용합니다 . 첫 번째와 두 번째 사이의 공간은 매우 중요합니다.<whilerhc<아니요생략하세요.

-xdeclarebash 옵션 알려주기출구변하기 쉬운.

주문 변경

아래 설명에 따르면 rhc명령은 while다음과 같은 방법으로 루프 위 줄에 배치될 수 있습니다.

tmpvar=$(rhc env list -a <app-name>)
while read -r line; do declare -x "$line"; done <<<"$tmpvar"

<<<만들다여기에 있는 문자열. 이 경우 루프에 대한 입력 $tmpvar으로 제공된다는 의미입니다.while

관련 정보