BASH: как объединить файл с переменной среды экспорта в файл свойств - PullRequest
0 голосов
/ 16 января 2019

У меня есть файл 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

Мне нужно преобразовать указанный выше файл в файл свойств (ключ = значение), чтобы результат был:

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

То есть мне нужно:

  1. Игнорировать строки, начинающиеся с хеша #
  2. Экспорт строк JMS_PORT (без знака равенства '=')
  3. Строки с пустым значением, например DB_URL (не срочно)
  4. Вне курса рассчитать соответствующий порт с помощью команды let

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вы можете создать скрипт, который получает env_var.sh, а затем использует простой awk для печати каждой переменной и ее значения

cat props.sh
source env_var.sh

while read v; do
   [[ -n ${!v} ]] && echo "${v}=${!v}"
done < <(awk -F '[=[:blank:]]+' '!/^#/ && NF > 2 { print $2 }' env_var.sh)

теперь, когда вы запускаете:

bash props.sh
BASE_PORT=8000
WEB_HOST=https://microsoft.com
DB_DRIVER=org.postgresql.Driver
APP_ROOT=/Users/vogash/myapp100
JMS_STORE=/Users/vogash/myapp100/../jms
JMS_PORT=8425
HTTPS_PORT=8401
USE_CRED=yes
0 голосов
/ 16 января 2019
. ./env_var.sh
cat env_var.sh | sed '/^#/d' | sed '/=$/d' | grep "=" | cut -d " " -f2 | cut -d "=" -f1 | while read line ; do eval "echo $line=\$$line" ; done > env_var.properties
0 голосов
/ 16 января 2019

это работает для данного формата

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...