我需要将properties
文件的每个属性转换为环境变量:
我的意思是,猜猜这个属性文件:
mongo.port=27017
mongo.host=127.0.0.1
mongo.databaseName = test
bo.url-jwt=https://localhost:8089/token
我想将它们创建为环境变量
export MONGO_PORT=27017
export MONGO_HOST=127.0.0.1
export MONGO_DATABASENAME=test
export BO_URL_JWT=https://localhost:8089/token
有什么工具或脚本可以得到这个吗?
我正在使用 ubuntu 18x + zsh
答案1
这是一个可以执行此操作的简短脚本:
#!/bin/bash
tmp1=$(mktemp)
tmp2=$(mktemp)
cut -d= -f 1 props.txt | tr '[:lower:]' '[:upper:]' | tr '.-' '_' > $tmp1
cut -d= -f 2 props.txt > $tmp2
paste -d= $tmp1 $tmp2 > output.props
sed -i 's/ *= */=/' output.props
sed -i 's/^/export /' output.props
rm $tmp1 $tmp2
该脚本按以下方式工作。使用 生成两个临时文件mktemp
。输入属性文件在“=”字符上分割,两个相应的字段将发送到这两个文件。
在第一个字段(属性名称)上,该tr
命令应用两次。一次用于小写到大写的转换,一次用于将特殊字符更改为下划线。字段值仅在这些更改后写入临时文件。
处理完成后,该paste
命令用于将字段重新组合到单个文件中,output.props。然后,sed
使用两个命令。第一个删除“=”字符周围的所有空格字符,否则这将是命令的语法错误export
。第二个sed
命令用于在每行前面添加字符串“export”前缀。最后,这两个临时文件就被清理掉了。
示例输出:
$ cat output.props
export MONGO_PORT=27017
export MONGO_HOST=127.0.0.1
export MONGO_DATABASENAME=test
export BO_URL_JWT=https://localhost:8089/token
生成输出文件后,使用它来实际设置环境中的变量。为此可以使用以下两种语法之一:
. output.props
source output.props