在 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
將所有環境變數印出。