2015-08-12 6 views
7

Ich möchte ein Unix-Einzeiler, der die aktuelle Ausführungsumgebung als JSON-Struktur ausgeben wird wie: {"env-var": "env-value", ... etc ... }Ausgabe UNIX-Umgebung als JSON

Diese irgendwie funktioniert:

(echo "{"; printenv | sed 's/\"/\\\"/g' | sed -n 's|\(.*\)=\(.*\)|"\1"="\2"|p' | grep -v '^$' | paste -s -d"," -; echo "}") 

hat aber einige zusätzliche Zeilen und ich denke, dass die Umgebungswerte oder Variablen nicht funktionieren, wenn haben ‚=‘ oder Zeilenumbrüche in ihnen.

Würde lieber pure bash/sh, aber kompakte python/perl/ruby ​​/ etc one-Liner würde auch geschätzt werden.

Antwort

9

Mit jq 1,5 (z jq 1.5rc2 - siehe http://stedolan.github.io/jq):

$ jq -n env 
+0

Externe Abhängigkeit ... aber schwer mit der Kürze zu argumentieren ... –

7

Dies funktioniert für mich:

python -c 'import json, os;print(json.dumps(dict(os.environ)))' 

Es ist ziemlich einfach; Die Hauptkomplikation ist, dass os.environ ein dict-ähnliches Objekt ist, aber es ist eigentlich kein Diktat, also müssen Sie es in ein Diktat konvertieren, bevor Sie es dem JSON-Serializer zuführen.

Das Hinzufügen von Klammern um die print-Anweisung lässt es sowohl in Python 2 als auch in 3 funktionieren, also sollte es für die vorhersehbare Zukunft auf den meisten * nix-Systemen funktionieren (besonders da Python standardmäßig auf jeder größeren Distribution ist).

+0

Das ist zu gearbeitet. Ich werde mit der jq Antwort wegen der lächerlichen Knappheit gehen, aber das ist gut für häufigere UNIX Abhängigkeit Umgebungen –

+0

Danke dafür. Basierend auf Ihrer Antwort schrieb ich ein [kleines Python-Snippet] (https://gist.github.com/gableroux/d6b2c2f7a69ebcd8430ea59c9bcc62c0/#file-env-to-json-py), um eine '.env' Datei zu lesen und ihre auszugeben Werte in JSON. Es gibt wahrscheinlich bessere Wege, aber ich brauchte das schnell :) – GabLeRoux