bash - BASH:如何将具有导出环境变量的文件聚合到属性文件
问题描述
我有这个 bash 文件:
env_var.sh
export BASE_PORT=8000
export WEB_HOST=https://microsoft.com
#export TEST_MACHINE=my.server.name
export DB_DRIVER=org.postgresql.Driver
export APP_ROOT=$HOME/myapp100
export DB_URL=
export JMS_STORE=$APP_ROOT/../jms
let JMS_PORT=$BASE_PORT+425
export JMS_PORT
let HTTPS_PORT=$BASE_PORT+401
export HTTPS_PORT
export USE_CRED=yes
我需要将上面的文件转换为属性文件(key=value),所以结果是:
env_var.properties
BASE_PORT=8000
WEB_HOST=https://microsoft.com
DB_DRIVER=org.postgresql.Driver
APP_ROOT=/home/admin/myapp100
JMS_STORE=/home/admin/myapp100/../jms
JMS_PORT=8425
HTTPS_PORT=8401
USE_CRED=yes
意思是我需要:
- 忽略从 hash # 开始的行
- 行导出 JMS_PORT(不带等号 '=')
- 具有空值的行,例如 DB_URL(不紧急)
- 当然用let命令计算相关端口
解决方案
这适用于给定的格式
$ awk '/^#/ {next}
/^export/ {n=split($2,a,"="); if(a[2]=="") next; kv[a[1]]=a[2]; print $2}
/^let/ {split($2,a,"[$+]"); if(a[2] in kv) print a[1] kv[a[2]]+a[3]}' file
BASE_PORT=8000
WEB_HOST=https://microsoft.com
DB_DRIVER=org.postgresql.Driver
APP_ROOT=$HOME/myapp100
JMS_STORE=$APP_ROOT/../jms
JMS_PORT=8425
HTTPS_PORT=8401
USE_CRED=yes
推荐阅读
- multithreading - 如果其他线程不会访问它,那么在没有锁的情况下更新线程中的对象是否安全?
- javascript - Meteor 在构建时无法读取整个资源文件
- node.js - 旧版本的节点/npm 链接到 macOS catalina 不支持的 -lstdc++
- python - 在 python 上使图像偏心
- r - R中不等任务和进度条的最佳负载平衡
- ios - 将我的 iOS 应用程序从 Fabric 迁移到 Firebase 后,Fabric 中仍然出现崩溃
- closedxml - 将 closedxml 发布到 azure 应用服务时遇到问题
- wordpress - 临时站点上的响应式设计中断
- python - 尝试使用 Flask 和 phyton 在 html 上显示图像,每次刷新都会改变
- c# - 为什么我的主窗体需要 20 多秒才能可见?