2015-08-12 9 views
7

Vorrei un one-liner unix che emetterà l'ambiente di esecuzione corrente come una struttura JSON come: {"env-var": "env-value", ... ecc ... }Output ambiente UNIX come JSON

Questo funziona un pò:

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

ma ha alcune linee extra e penso che non funziona se i valori di ambiente o le variabili sono '=' o ritorni a capo in loro.

Preferirei bash/sh puro, ma anche complementi di pitone/perl/rubino/ecc. Compatti.

risposta

9

Utilizzando JQ 1.5 (ad esempio JQ 1.5rc2 - vedi http://stedolan.github.io/jq):

$ jq -n env 
+0

Dipendenza esterna ... ma difficile da discutere con la durezza ... –

7

questo funziona per me:

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

E 'piuttosto semplice; la principale complicazione è che os.environ è un oggetto dict-like, ma in realtà non è un dict, quindi è necessario convertirlo in un dict prima di inviarlo al serializzatore json.

L'aggiunta di parentesi attorno alla dichiarazione di stampa consente di funzionare sia in Python 2 che in 3, quindi dovrebbe funzionare per il prossimo futuro sulla maggior parte dei sistemi * nix (soprattutto dal momento che Python viene fornito di default su qualsiasi distribuzione principale).

+0

che ha lavorato troppo. Ho intenzione di andare con la risposta jq a causa della ridondanza, ma questo è buono per gli ambienti di dipendenza UNIX più comuni –

+0

Grazie per questo. In base alla tua risposta, ho scritto un [piccolo frammento di python] (https://gist.github.com/gableroux/d6b2c2f7a69ebcd8430ea59c9bcc62c0/#file-env-to-json-py) per leggere un file '.env' ed emettere il suo valori in json. Ci sono probabilmente modi migliori, ma ho avuto bisogno di questo rapidamente :) – GabLeRoux

Problemi correlati