![](/img/trans.png)
[英]How to convert a python script in a local conda env into systemd service in Linux?
[英]How to convert .properties to linux env export file
我們有以下屬性文件,用於Java,需要將其轉換為linux變量,包括=右側的替換項。
installation.location=/tmp
ClusterName=demo
product.names=app1,app2,app3
version=2018
logical.host.name=test.domain.com
app1.installation.location=$[installation.location]/app1
app2.installation.location=$[installation.location]/app2
app3.installation.location=$[installation.location]/app3
appserver.hostname=test.domain.com
ant.home=/3rdparty/apache-ant-1.10.1
java.home=/usr/lib/jvm/java-1.8.0-openjdk
abc.application.name=app1
appserver.hostname=
ucl.standalone=true
app1.application.name=$[abc.application.name]
app1.external.hostname=$[appserver.hostname]
app1.external.port=30001
app2.external.hostname=$[appserver.hostname]
我有以下代碼,它將轉換並創建setEnv.sh文件,但無法更改/轉換變量右側的installation.location,appserver.hostname等。
#!/bin/bash
tmp1=$(mktemp)
tmp2=$(mktemp)
cut -d= -f 1 env.properties | tr '[:lower:]' '[:upper:]' | tr '.-' '_' > $tmp1
cut -d= -f 2 env.properties | tr '[]' '{}' > $tmp2
paste -d= $tmp1 $tmp2 > setEnv.sh.temp
sed -e "s/\r//g" -e '/^=/d' -e '/^#/d' setEnv.sh.temp > setEnv.sh
sed -i 's/ *= */=/' setEnv.sh
#sed -i '/^(\s*#|$)/!s/^/export /' setEnv.sh
sed -i '/^#/!s/^/export /' setEnv.sh
#sed -i 's/^/export /' setEnv.sh
rm $tmp1 $tmp2
rm setEnv.sh.temp
我得到的結果低於預期,但並不准確
export INSTALLATION_LOCATION=/tmp
export CLUSTERNAME=demo
export PRODUCT_NAMES=app1,app2,app3
export VERSION=2018
export LOGICAL_HOST_NAME=test.domain.com
export APP1_INSTALLATION_LOCATION=${installation.location}/app1
export APP2_INSTALLATION_LOCATION=${installation.location}/app2
export APP3_INSTALLATION_LOCATION=${installation.location}/app3
export APPSERVER_HOSTNAME=test.domain.com
export ANT_HOME=/3rdparty/apache-ant-1.10.1
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
這是一個awk命令,它使您的示例輸入文件似乎需要進行更改:
$ awk -F= '/=/{gsub(/\./, "_", $1); $1="export " toupper($1); gsub(/\[/, "{"); gsub(/\]/, "}"); gsub(/\r/, "")} 1' OFS== env.properties
export INSTALLATION_LOCATION=/tmp
export CLUSTERNAME=demo
export PRODUCT_NAMES=app1,app2,app3
export VERSION=2018
export LOGICAL_HOST_NAME=test.domain.com
export APP1_INSTALLATION_LOCATION=${installation.location}/app1
export APP2_INSTALLATION_LOCATION=${installation.location}/app2
export APP3_INSTALLATION_LOCATION=${installation.location}/app3
export APPSERVER_HOSTNAME=test.domain.com
export ANT_HOME=/3rdparty/apache-ant-1.10.1
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export ABC_APPLICATION_NAME=app1
export APPSERVER_HOSTNAME=
export UCL_STANDALONE=true
export APP1_APPLICATION_NAME=${abc.application.name}
export APP1_EXTERNAL_HOSTNAME=${appserver.hostname}
export APP1_EXTERNAL_PORT=30001
export APP2_EXTERNAL_HOSTNAME=${appserver.hostname}
對於那些喜歡他們的命令的人來說,它們分布在多行:
awk -F= '
/=/{
gsub(/\./, "_", $1)
$1="export " toupper($1)
gsub(/\[/, "{")
gsub(/\]/, "}")
gsub(/\r/, "")
} 1' OFS== env.properties
-F=
告訴awk使用=
作為字段分隔符。
/=/{...}
告訴awk查看當前行是否包含=
,如果是,則在該行的大括號中執行命令。 這些命令是:
gsub(/\\./, "_", $1)
告訴awk在第一個字段(變量名)中用下划線替換句點。
$1="export " toupper($1)
告訴awk將變量名轉換為大寫。
gsub(/\\[/, "{")
和gsub(/\\]/, "}")
告訴awk將[
和]
分別替換為{
和}
。
gsub(/\\r/, "")
告訴awk刪除任何回車符。
1
告訴awk打印行。
OFS==
告訴awk將=
用作輸出的字段分隔符。
env.properties
告訴awk要操作哪個文件。
這將添加一些代碼中所包含但示例輸入所不需要的其他功能:
awk -F= '
/^=/ {
next
}
/^[^#]/ && /=/{
gsub(/\./, "_", $1)
$1="export " toupper($1)
gsub(/\[/, "{")
gsub(/\]/, "}")
gsub(/\r/, "")
sub(/[[:space:]]*=[[:space:]]*/, "=")
} 1' OFS== env.properties
使用GNU sed:
$ sed -E ':a; s/(\[[^]]*)\./\1_/; ta; s/\[[^]]*\]/\U&/' env.properties | awk -F= '/=/{gsub(/\./, "_", $1); $1="export " toupper($1); gsub(/\[/, "{"); gsub(/\]/, "}"); gsub(/\r/, "")} 1' OFS==
export INSTALLATION_LOCATION=/tmp
export CLUSTERNAME=demo
export PRODUCT_NAMES=app1,app2,app3
export VERSION=2018
export LOGICAL_HOST_NAME=test.domain.com
export APP1_INSTALLATION_LOCATION=${INSTALLATION_LOCATION}/app1
export APP2_INSTALLATION_LOCATION=${INSTALLATION_LOCATION}/app2
export APP3_INSTALLATION_LOCATION=${INSTALLATION_LOCATION}/app3
export APPSERVER_HOSTNAME=test.domain.com
export ANT_HOME=/3rdparty/apache-ant-1.10.1
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export ABC_APPLICATION_NAME=app1
export APPSERVER_HOSTNAME=
export UCL_STANDALONE=true
export APP1_APPLICATION_NAME=${ABC_APPLICATION_NAME}
export APP1_EXTERNAL_HOSTNAME=${APPSERVER_HOSTNAME}
export APP1_EXTERNAL_PORT=30001
export APP2_EXTERNAL_HOSTNAME=${APPSERVER_HOSTNAME}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.