2015-08-12 19 views
7

Chciałbym unix jedno-liniowy, który wyprowadzi bieżące środowisko wykonawcze jako strukturę JSON, jak: {"env-var": "wartość-env", ... etc ... }Wyjście ze środowiska UNIX jako JSON

to trochę działa:

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

ale ma kilka dodatkowych linii i myślę, że nie będzie działać, jeśli wartości mają zmienne środowiskowe lub „=” lub znaki nowej linii w nich.

Wolałby być czysty bash/sh, ale kompaktowy python/perl/ruby ​​/ etc jedno-wkładki również byłyby mile widziane.

Odpowiedz

7

Działa to dla mnie:

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

To bardzo proste; główną komplikacją jest to, że os.environ jest obiektem podobnym do dyktatu, ale w rzeczywistości nie jest to dyktando, więc musisz przekonwertować go na dyktando, zanim dodasz go do serializatora json.

Dodanie nawiasów wokół instrukcji print pozwala na pracę zarówno w Pythonie 2, jak i 3, więc powinno działać w przewidywalnej przyszłości na większości systemów * nix (zwłaszcza, że ​​Python przychodzi domyślnie w każdej głównej dystrybucji).

+0

to działało także. Mam zamiar pójść z odpowiedzią jq z powodu śmiesznej zwięzłości, ale to jest dobre dla bardziej typowych środowisk zależności UNIX –

+0

Dzięki za to. Na podstawie Twojej odpowiedzi napisałem [mały fragment kodu Pythona] (https://gist.github.com/gableroux/d6b2c2f7a69ebcd8430ea59c9bcc62c0/#file-env-to-json-py), aby odczytać plik '.env' i wypisać jego wartości w json. Prawdopodobnie są lepsze sposoby, ale potrzebowałem tego szybko :) – GabLeRoux