명령줄에서 환경 변수 파일을 어떻게 설정합니까?

명령줄에서 환경 변수 파일을 어떻게 설정합니까?

쉘 스크립트를 시작할 때 로드해야 하는 환경 변수 세트가 포함된 .env.local 파일이 있습니다. 명령줄에서 이 파일을 지정하는 방법이 있습니까?

.env.local

ONEDRIVE_TENANT_ID=...
ONEDRIVE_CLIENT_ID=...
ONEDRIVE_CLIENT_SECRET=...

쉘 스크립트: script.sh

#!/usr/bin/env bash
TENANT_ID=${ONEDRIVE_TENANT_ID}
CLIENT_ID=${ONEDRIVE_CLIENT_ID}
CLIENT_SECRET=${ONEDRIVE_CLIENT_SECRET}
REDIRECT_URI=${ONEDRIVE_REDIRECT_URI}
curl REDIRECT_URI ...

시도해 보았지만 source .env.local; sh script.sh예상대로 작동하지 않습니다!
Ps, 스크립트는 다양한 환경에서 실행되기 때문에 스크립트에 소스코드를 추가할 수 없습니다. 따라서 .env.local의 절대 경로는 환경에 따라 다릅니다.

답변1

BASH_ENV변수 할당을 통해 도트 스크립트를 가리키도록 설정할 수 있습니다 . 이렇게 하면 스크립트를 실행하기 전에 쉘 변수가 자동으로 획득되어 스크립트에서 쉘 변수를 사용할 수 있게 됩니다.

BASH_ENV=path/to/.env.local ./script.sh

스크립트 script.sh인 경우 도트 스크립트의 변수(및 함수 등)에 액세스할 수 있습니다.bash.env.local

bash매뉴얼 에서 :

BASH_ENV
셸 스크립트 실행 시 이 매개변수를 설정하면 해당 bash값은 셸을 초기화한 명령이 포함된 파일 이름으로 해석됩니다 . 이름. 검색 결과 파일 이름에는 사용되지 않습니다.~/.bashrcBASH_ENVPATH


귀하의 스크립트는아니요명령줄에서 bash다른 스크립팅 언어에 대한 명시적 인터프리터를 사용하는 경우(예: 질문에서 수행하는 것처럼) 에 의해 실행됩니다.sh

답변2

source .env.local; sh script.sh.env.local가 아닌 상위 셸의 컨텍스트에서 실행됩니다 script.sh. 거기에 설정된 일반 셸 변수는 하위 프로세스에 표시되지 않습니다. 당신은 그것들을 명확하게 진술할 필요가 있습니다 export.

.env.local다음과 같이 만드세요 :

export ONEDRIVE_TENANT_ID=...
export ONEDRIVE_CLIENT_ID=...
export ONEDRIVE_CLIENT_SECRET=...

답변3

스크립트 내에서 호출해 보세요 source "file.env.local"(편집: 변수/배열을 호출하기 전에).

아니면 이것이 도움이 될 수 있습니다 https://stackoverflow.com/questions/19331497/set-environment-variables-from-file-of-key-value-pairs

관련 정보