[英]using .env property in bash script
我有一個服務器應用程序,它有兩個部署,一個用於暫存環境,另一個用於生產環境。 我有兩個單獨的腳本負責啟動進程。 我想通過讀取環境文件將start_production.sh
和start_staging.sh
合並到start.sh
中。
start_production.sh
#!/bin/bash
pm2 delete production
pm2 start "npm run build && npm run start:prod" --name production --log-date-format 'DD-MM HH:mm:ss.SSS'
pm2 logs
檢查內容,兩個腳本之間的唯一區別是應該始終對應於環境文件的進程名稱空間。 這將使其成為加載.env
屬性NODE_ENV
的理想選擇
.env
NODE_ENV=staging
最終我想做類似的事情
start.sh
#!/bin/bash
ENVIRONMENT={read NODE_ENV content of .env}
pm2 delete echo $ENVIRONMENT
pm2 start "npm run build && npm run start:prod" --name echo $ENVIRONMENT --log-date-format 'DD-MM HH:mm:ss.SSS'
pm2 logs
很明顯,當談到 bash 腳本時,我是一個絕對的新手,所以我想要一個盡可能具體的答案。
我將提供一個基於兩個當前答案的聚合解決方案
start.sh
#!/bin/bash
source .env
ENVIRONMENT="$NODE_ENV"
if [ "$ENVIRONMENT" != "production" ] && [ "$ENVIRONMENT" != "staging" ]; then
echo "improper .env NODE_ENV"
exit
fi
pm2 delete "$ENVIRONMENT"
pm2 start "npm run build && npm run start:prod" --name "$ENVIRONMENT" --log-date-format 'DD-MM HH:mm:ss.SSS'
pm2 logs
您可以.env
source
。 由於格式KEY=value
與 bash 執行其環境變量的方式兼容。 所以在你的情況下, start.sh
將是
#!/bin/bash
source .env
pm2 delete echo $NODE_ENV
pm2 start "npm run build && npm run start:prod" --name $NODE_ENV --log-date-format 'DD-MM HH:mm:ss.SSS'
pm2 logs
Akshit 關於采購.env
文件的建議很好。 我注意到您的 shell 代碼存在其他幾個問題。
首先值得注意的是,將變量替換雙引號是“最佳實踐” 。
您的示例代碼的更大問題是無關的echo
。 例如,
pm2 delete echo $ENVIRONMENT
不需要那里的echo
。 “回聲”將成為正在運行的命令的一部分。 shell 不需要替換那里的變量。
結合我們得到的這兩個修復
pm2 delete "$ENVIRONMENT"
這應該運作良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.