2017-04-03 2 views
5

Wie kann ich einen Bash-Befehl für jedes JSON-Objekt in einem JSON-Array mit jq ausführen? Bisher habe ich das:Verwenden von jq mit bash zum Ausführen von Befehlen für jedes Objekt im Array

cat credentials.json | jq -r '.[] | .user, .date, .email' | mycommand -u {user} -d {date} -e {email} 

Dies scheint nicht zu funktionieren. Wie kann ich die Parameter aus dem JSON-Array in mein Kommando übernehmen?

Meine JSON-Datei sieht wie folgt aus etwas:

[ 
    "user": "danielrvt", 
    "date": "11/10/1988", 
    "email": "[email protected]", 
    ... 
] 

Antwort

9

Ihre beste Wette ist wahrscheinlich die Ausgabe jeder Datensatz in so etwas wie TSV-Format, dann lesen Sie das von einem Shell-Schleife.

jq -r '.[]|[.user, .date, .email] | @tsv' | 
    while IFS=$'\t' read -r user date email; do 
    mycommand -u "$user" -d "$date" -e "$email" 
    done 

jq selbst nicht so etwas wie ein system Anruf einen externen Befehl aus einem Filter zu laufen, obwohl es, dass they are working on it scheint.

2

könnten Sie jq Ausgang haben die Befehle auszuführen, so etwas wie

.[] | "mycommand \(.user|@sh) \(.date|@sh) \(.email|@sh)" 

und dort ausführen. Etwas wie

bash <(jq -r '.[] | "mycommand \(.user|@sh) \(.date|@sh) \(.email|@sh)"' foo) 
Verwandte Themen