2016-10-19 7 views
1

bashスクリプトを使用して、いくつかの変数を含むjsonファイルを作成する必要があります。JSONテンプレートファイルにbash変数を書き込む

cat <<'EOF' > template.json 
{ 
"ip_range" : "$snmp_ip1", 
"types" : [ "snmp" ], 
"description" : "$snmp_cred1", 
"snmp.version": "v2c", 
"snmp.port" : 161, 
"snmp.community" : "$snmp_cred1", 
"snmp.retries" : 3, 
"snmp.timeout" : 2 
} 
EOF 

残念ながら、猫が値に変数を展開しません。この目的のために

は、私は猫を使用してJSONテンプレートファイルを作成し、bashのファイルを、持っています。 それで、jqを使っていくつかの変数をテンプレートに挿入して、拡張変数を使って新しいファイルを作成する必要があります。 私は、次のコードで、このためJQを使用しようとしました:

jq \ 
--arg snmp_ip1 "$snmp_ip" \ 
--arg snmp_cred1 "$snmp_cred" \ 
'.["snmp_ip1"]=$snmp_ip1 | .["snmp_cred"]=$snmp_cred1' \ 
<$DIR/template.json >$DIR/cred.json 

生憎、それだけの変数を持つ新しい文字列を挿入する、ではなく、テンプレート内の変数を以下のように拡張します

{ 
"snmp_cred": "fortinet/fortigate/1.3.6.1.4.1.12356.101.1.37000_fortigate3700d/[email protected]", 
"snmp_ip1": "10.82.112.21", 
"ip_range": "$snmp_ip1", 
"types": [ 
"snmp" 
], 
"description": "$snmp_cred1", 
"snmp.version": "v2c", 
"snmp.port": 161, 
"snmp.community": "snmp_cred1", 
"snmp.retries": 3, 
"snmp.timeout": 2 
} 

はあなたが私をヒントことができ、どのようにしスクリプトを書き換え(または、多分別のアプローチを使用)、この出力でJSONファイルを作成するには:

{ 
"ip_range": "10.82.112.21", 
"types": [ "snmp" ], 
"description": "fortinet/fortigate/1.3.6.1.4.1.12356.101.1.37000_fortigate3700d/[email protected]", 
"snmp.version": "v2c", 
"snmp.port": 161, 
"snmp.community": "fortinet/fortigate/1.3.6.1.4.1.12356.101.1.37000_fortigate3700d/[email protected]", 
"snmp.retries": 3, 
"snmp.timeout": 2 
} 

答えて

1

はあなたdelimieter囲む引用符を削除しますこれにより、catは変数を展開しません。

+0

私が変更したとき:cat < template.json - テンプレートから変数を削除するだけです。例えば、 "ip_range": ""、 –

+0

'cat'が返る直前に 'echo $ snmp_ip1'とは何か? –

+0

http://prntscr.com/cw7ed3 –

関連する問題