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 usajq
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''