Shell-Script
用它們的實際值替換文件中的環境變數?
有沒有一種簡單的方法來替換/評估文件中的環境變數?就像假設我有一個文件
config.xml
,其中包含:<property> <name>instanceId</name> <value>$INSTANCE_ID</value> </property> <property> <name>rootPath</name> <value>/services/$SERVICE_NAME</value> </property>
…ETC。我想用環境變數
$INSTANCE_ID
的值替換文件中的INSTANCE_ID
環境變數$SERVICE_NAME
的值SERVICE_NAME
。我不會先驗地知道需要哪些環境變數(或者更確切地說,如果有人向配置文件添加新的環境變數,我不想更新腳本)。謝謝!
您可以使用
envsubst
(部分gnu gettext
):envsubst < infile
會將文件中的環境變數替換為相應的值。變數名稱必須僅由字母數字或下劃線 ASCII 字元組成,不能以數字開頭且非空;否則這樣的變數引用將被忽略。
要僅替換某些環境變數,請參閱此問題。
這不是很好,但它有效
( echo "cat <<EOF" ; cat config.xml ; echo EOF ) | sh
如果它在一個 shell 腳本中,它看起來像:
#! /bin/sh cat <<EOF <property> <name>instanceId</name> <value>$INSTANCE_ID</value> </property> EOF
編輯,第二個提案:
eval "echo \"$(cat config.xml)\""
編輯,與問題不嚴格相關,但在從文件讀取變數的情況下:
(. .env && eval "echo \"$(cat config.xml)\"")