Je n'arrive pas à me jq
comporter "normalement" dans un pipeline shell. Par exemple:
$ curl -s https://api.github.com/users/octocat/repos | jq | cat
entraîne jq
simplement l'impression de son texte d'aide *. La même chose se produit si j'essaie de rediriger jq
la sortie de vers un fichier:
$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
Est-ce qu'il jq
renonce délibérément s'il détermine qu'il n'est pas exécuté à partir d'un terminal? Comment puis-je empêcher ce comportement afin de pouvoir l'utiliser jq
dans un pipeline?
* (Je me rends compte que cet exemple contient une utilisation inutile de chat ; c'est à des fins d'illustration uniquement)
jq
c'est à la fois la lecture d'un tuyau et l'écriture sur un autre tuyau. Si le désir est simplement de voir la sortie dejq
, alorscat
lui-même n'est pas nécessaire..
habitude, car ma pratique standard consiste à voir d'abord à quoi ressemble le JSON, puis à revenir en arrière et à commencer à ajouter au filtre, qui devra le plus souvent être cité.Un cas d'utilisation que je me suis retrouvé à faire fréquemment est également "Comment puis-je construire des données JSON à fournir dans d'autres commandes shell, par exemple
curl
?" Pour ce faire, j'utilise l'--null-input/-n
option:Et un exemple en le passant
curl
:la source
jq
au début d'un pipeline shell plutôt qu'au milieu / fin pour filtrer certaines données. L'curl
exemple est basique, mais je me suis souvent retrouvé à taper à la main des données JSONcurl
et à essayer de bien citer, alors j'ai pensé que cela pourrait être utile à d'autres également.