2016-04-15 176 views
1

我在服務器上運行後編寫了這段代碼,並將環境變量從JSON轉換爲bash .env格式。將JSON轉換爲bash環境變量

#!/usr/bin/env node 
var strings = [] 
process.stdin.resume() 
process.stdin.setEncoding('utf8') 
process.stdin.on('data', function(data) { 
    var json = JSON.parse(data) 
    for (var key in json) { 
    var val = json[key] 
    strings.push(key + '="' + val + '"') 
    } 
}) 
process.stdin.on('end', function() { 
    var output = strings.join('\n') 
    process.stdout.write(output) 
}) 

這可以做到沒有節點,只是bash?我無法在沒有安裝節點或沒有指定正確路徑的情況下在服務器上工作。

+3

我不知道這段代碼在做什麼,你應該指定它。要在bash中處理JSOn,請使用jq - > https://stedolan.github.io/jq/ – fedorqui

+0

我需要一個命令/ file/bash腳本來處理每個鍵值對的STDIN JSON和STDOUT,格式爲「key + '=''+ val +'「''後面跟着一個新行。 – ThomasReggi

+0

@fedorqui我不能使用ubuntu/linux/unix原生的任何依賴項。 – ThomasReggi

回答

3

是的,假設你想保留的所有鍵/纈氨酸對的形式爲:

"key":"stringval" 
"key":numval 
"key":true or false or null 

(與結腸周圍可選空間):

#!/bin/sh 
tr -d '\n' | 
    grep -o '"[A-Za-z_][A-Za-z_0-9]\+"\s*:\s*\("[^"]\+"\|[0-9\.]\+\|true\|false\|null\)' | 
    sed 's/"\(.*\)"\s*:\s*"\?\([^"]\+\)"\?/\1="\2"/' 

例子:

cat manifest.json | ./json2env.sh 

收益率

name="Polymer Starter Kit" 
short_name="Polymer Starter Kit" 
src="images/touch/icon-72x72.png" 
sizes="72x72" 
type="image/png" 
test1="0.123" 
test2="true" 
test3="false" 
test4="null" 
+0

謝謝。它按預期工作:) – Ibrahim