シェルスクリプトの起動時にロードする必要がある一連の環境変数を含む.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