在 shell script 中載入 .env
shell env -[ ! -f .env ] || export $(grep -v '^#' .env | sed 's/\r$//' | xargs)
Why
雖然不是必要但有時想使用外部檔案來載入環境參數。
How
[ ! -f .env ] || export $(grep -v '^#' .env | sed 's/\r$//' | xargs)
echo "load .env: "
printenv
[ ! -f .env ] 是檢查 .env 這檔案存不存在。
grep -v '^#' .env 取出 .env 檔案中不是註解的行。 shell script 中以 # 開頭是註解。
sed 's/\r$//' 將前面的結果給 sed 處理,去掉換行。
需要這樣處理的原因是
\r 在 ASCII 十進位中是 15 指的是 Enter 鍵,原來是代表指示打字機托架(carriage)返回到最右側。
\n 在 ASCII 十進位中是 12 指的是 New Line (新行)。
在 Window/Dos 中換行的指示是 \r\n,而其他系統使用 \n。故需要去掉 \r 避免載入的變數結尾多出 \r。
最後透過 xargs 將每一行 echo 給 export ,等同 export name[=value]。
export 會將區域變數成為廣域變數,等同在整個 shell script 中都能使用該變數。
不信,可以試試用 printenv 將所有環境變數印出。