versiones guia español descargar actualizar shell pipe jq

shell - guia - qgis manual



¿Cómo usar `jq` en una tubería de shell? (2)

Parece que no puedo hacer que jq comporte "normalmente" en una tubería de shell. Por ejemplo:

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

da como resultado que jq simplemente imprima su texto de ayuda *. Lo mismo sucede si intento redirigir la salida de jq a un archivo:

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

¿Está jq rescatando deliberadamente si determina que no se está ejecutando desde un tty? ¿Cómo puedo evitar este comportamiento para poder usar jq en una tubería?

* (Me doy cuenta de que este ejemplo contiene un uso inútil del gato ; es solo para fines ilustrativos)


Debe proporcionar un filtro como argumento. Para pasar el JSON sin modificaciones, aparte de la impresión bonita que proporciona jq por defecto, use el filtro de identidad . :

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


Un caso de uso que me he encontrado haciendo con frecuencia también es "¿Cómo construyo datos JSON para suministrarlos a otros comandos de shell, por ejemplo curl ?" La forma en que hago esto es usando la --null-input/-n :

¡No lea ninguna entrada en absoluto! En cambio, el filtro se ejecuta una vez usando null como entrada. Esto es útil cuando se usa jq como una calculadora simple o para construir datos JSON desde cero.

Y un ejemplo pasándolo a curl :

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