Je n'arrive pas à obtenir que jq
se comporte "normalement" dans un pipeline Shell. Par exemple:
$ curl -s https://api.github.com/users/octocat/repos | jq | cat
résulte en jq
en imprimant simplement son texte d'aide *. La même chose se produit si j'essaie de rediriger la sortie de jq
vers un fichier:
$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
Est-ce que jq
renfloue délibérément s'il détermine qu'il ne s'agit pas d'un tty? Comment puis-je empêcher ce comportement afin que je puisse utiliser jq
dans un pipeline?
* (Je réalise que cet exemple contient un tilisation inutile de cat ; à des fins d'illustration uniquement)
Vous devez fournir un filtre en argument. Pour transmettre le fichier JSON par un fichier non modifié autre que la jolie impression jq
fournit par défaut, utilisez le filtre d'identité .
:
curl -s https://api.github.com/users/octocat/repos | jq '.' | cat
"Comment puis-je construire des données JSON pour les alimenter avec d'autres commandes Shell, par exemple curl
?" Pour ce faire, utilisez l'option --null-input/-n
:
Ne lisez aucune entrée du tout! Au lieu de cela, le filtre est exécuté une fois en utilisant
null
comme entrée. Ceci est utile lorsque vous utilisezjq
comme simple calculatrice ou que vous construisez des données JSON à partir de rien.
Et un exemple le passant dans curl
:
jq -n '{key: "value"}' | curl -d @- \
--url 'https://some.url.com' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'