쉘 스크립트를 시작할 때 로드해야 하는 환경 변수 세트가 포함된 .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
값은 셸을 초기화한 명령이 포함된 파일 이름으로 해석됩니다 . 이름. 검색 결과 파일 이름에는 사용되지 않습니다.~/.bashrc
BASH_ENV
PATH
귀하의 스크립트는아니요명령줄에서 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