[shell] 쉘 파이프 라인에서`jq`를 사용하는 방법은 무엇입니까?

jq쉘 파이프 라인에서 “정상적으로”동작 하지 않는 것 같습니다 . 예를 들면 다음과 같습니다.

$ curl -s https://api.github.com/users/octocat/repos | jq | cat

결과 jq단순히 도움말 텍스트 *을 인쇄. jq의 출력을 파일 로 리디렉션하려고하면 동일한 문제가 발생 합니다.

$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json

되어 jq그것이 터미날에서 실행되지 않고 있다고 판단 할 경우 의도적으로 구제? jq파이프 라인에서 사용할 수 있도록이 동작을 방지하려면 어떻게해야합니까?


* (이 예제에는 쓸모없는 고양이 사용 이 포함되어 있습니다 .



답변

필터를 인수로 제공해야합니다. jq기본적으로 예쁜 인쇄가 아닌 수정되지 않은 상태로 JSON을 전달하려면 ID 필터를 사용하십시오 ..

curl -s https://api.github.com/users/octocat/repos | jq '.' | cat


답변

자주 사용하는 것으로 확인 된 사용 사례 중 하나는 “예를 들어 다른 쉘 명령에 제공 할 JSON 데이터를 어떻게 구성 curl합니까?”입니다. 내가하는 방법은 --null-input/-n옵션 을 사용하는 것입니다.

입력 내용을 전혀 읽지 마십시오! 대신, null입력으로 필터를 한 번 실행 합니다. jq간단한 계산기로 사용하거나 처음부터 JSON 데이터를 구성 할 때 유용합니다 .

그리고 그것을 전달하는 예제 curl:

jq -n '{key: "value"}' | curl -d @- \
  --url 'https://some.url.com' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'


답변