【问题标题】:Convert JSON to bash environment variables将 JSON 转换为 bash 环境变量
【发布时间】:2016-08-08 00:31:41
【问题描述】:

我不久前写了这个美丽的东西,在服务器上运行并将环境变量从 JSON 转换为 bash .env 格式。

#!/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 吗?我无法在没有安装节点或没有指定正确路径的服务器上运行它。

【问题讨论】:

  • 我不知道这段代码在做什么,你应该指定它。要在 bash 中处理 JSOn,请使用 jq --> stedolan.github.io/jq
  • 我需要一个命令/文件/bash 脚本来处理 STDIN JSON 和 STDOUT 每个键值对,格式为key + '="' + val + '"',后跟一个新行。
  • @fedorqui 我不能使用任何不是 ubuntu / linux / unix 原生的依赖项。
  • 正如@fedorqui 建议的那样,使用 JSON 处理器。 Bash 不是适合这项工作的工具。
  • 那你不能这样做;标准的 Unix 实用程序不适合解析 JSON。

标签: json node.js bash env


【解决方案1】:

是的,假设您要保留的所有键/值对都采用以下形式:

"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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2021-11-06
    • 2022-11-28
    • 2014-06-17
    相关资源
    最近更新 更多