zl624867243 发表于 2018-11-21 22:41

模板渲染,如何用python或者shell实现?

本帖最后由 zl624867243 于 2018-11-22 00:31 编辑

执行python 或者shell脚本,传一个json 数据:
例如:
python a.py '{"name":"abc","app_path":"/usr/local"}'
or
bash a.sh '{"name":"abc","app_path":"/usr/local"}'


源文件a.conf如下:
program={{ name }}
directory={{ app_path }}想要的结果result.conf:
program=abc
directory=/usr/local
json 数据可能一长串,我不想一个去赋值,所以希望是遍历的方式

本友会机友会摄友会 发表于 2018-11-21 23:51

zl624867243 发表于 2018-11-22 00:32

回复 2# 本友会机友会摄友会

这个方案 需要一个个赋值去搞 不科学。人家传给我的json数据可能是一长串

baby_神 发表于 2018-11-22 10:42

python 不是有json库么?

wh7211 发表于 2018-11-22 11:55

回复 1# zl624867243


cat a.conf
program={{ name }}
directory={{ app_path }}

cat a.sh
#!/bin/bash

echo "$1" > b.conf
awk -F"[={} ]+" 'FILENAME==ARGV{b=split($0,a,",");for(i=1;i<=b;i++){match(a,"\042([^\"]+)\042:\042([^\"]+)",c);d]=c}}d[$2]{print $1"="d[$2]>"result.conf"}' b.conf a.conf

./a.sh '{"name":"abc","app_path":"/usr/local"}'

cat result.conf
program=abc
directory=/usr/local

zl624867243 发表于 2018-11-22 13:59

# cat render.sh
#!/bin/bash
echo "$1" > b.conf
awk -F"[={} ]+" 'FILENAME==ARGV{b=split($0,a,",");for(i=1;i<=b;i++){match(a,"\042([^\"]+)\042:\042([^\"]+)",c);d]=c}}d[$2]{print $1"="d[$2]>"result.conf"}' b.conf a.conf
# cat b.conf
{"name":"abc","app_path":"/usr/local","sex":"man"}
# cat result.conf
program=abc
directory=/usr/local
# bash render.sh '{"name":"abc","app_path":"/usr/local","sex":"man"}'
# cat result.conf
program=abc
directory=/usr/local
#

回复 5# wh7211

三个参数怎么就不行了呢

wh7211 发表于 2018-11-22 14:13

回复 6# zl624867243


因为你忘记了在a.conf中定义第3个参数,你的逻辑需要事先在a.conf中定义待传参数
cat a.conf
program={{ name }}
directory={{ app_path }}
person={{ sex }}

./a.sh '{"name":"abc","app_path":"/usr/local","sex":"man"}'

cat result.conf
program=abc
directory=/usr/local
person=man

zl624867243 发表于 2018-11-22 16:36

回复 7# wh7211

是我抄得有问题吗

# cat a.conf
program={{ name }}
directory={{ app_path }}
sex={{ man }}
# cat result.conf
program=abc
directory=/usr/local
# bash render.sh '{"name":"abc","app_path":"/usr/local","sex":"man"}'
# cat result.conf
program=abc
directory=/usr/local
# cat render.sh
#!/bin/bash
echo "$1" > b.conf
awk -F"[={} ]+" 'FILENAME==ARGV{b=split($0,a,",");for(i=1;i<=b;i++){match(a,"\042([^\"]+)\042:\042([^\"]+)",c);d]=c}}d[$2]{print $1"="d[$2]>"result.conf"}' b.conf a.conf
# cat a.conf
program={{ name }}
directory={{ app_path }}
sex={{ man }}

zl624867243 发表于 2018-11-22 16:37

汗网络不好 提交了两次

wh7211 发表于 2018-11-22 16:52

本帖最后由 wh7211 于 2018-11-22 16:54 编辑

回复 8# zl624867243


# cat a.conf
program={{ name }}
directory={{ app_path }}
sex={{ man }}
待传参数{"name":"abc","app_path":"/usr/local","sex":"man"}中,name,app_path和sex都应该放在a.conf中的“{{}}”里面,你把sex放错位置了
页: [1] 2
查看完整版本: 模板渲染,如何用python或者shell实现?