2017-04-03 2 views
5

jq를 사용하여 json 배열의 모든 json 객체에 대해 bash 명령을 실행하려면 어떻게해야합니까? 지금까지 나는 이것을 가지고있다 :bash와 함께 jq를 사용하여 배열의 각 객체에 대한 명령을 실행하십시오.

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

이것은 효과가없는 것처럼 보인다. json 배열에서 매개 변수를 내 명령으로 가져 오는 방법은 무엇입니까?

내 JSON 파일은 다음과 같은 :

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

답변

9

가장 좋은 방법은, 다음 쉘 루프에서 읽었 출력에 아마 TSV 형식과 같이 각 레코드입니다. 이 they are working on it 것으로 보인다 있지만

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

jq 자체

는 필터 내에서 외부 명령을 실행하는 system 전화 같은 것을 가지고 있지 않습니다.

2

당신은 명령이 실행 jq 출력,

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

을 실행 같은 것을 가질 수 있습니다. 예 :

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