Comment puis-je écrire une sortie canalisée qui est passée par jq
dans un fichier dans Shell
Exemple:
curl api.example.com | jq > call.txt
ne fonctionnera pas. Non plus
(curl api.example.com | jq) > call.txt
Aidez-moi!
Edit: Donc, curl api.example.com > call.txt
fonctionne parfaitement. Il s’agit donc de la canalisation vers jq
Vous utilisez jq
faux ...
Il suffit d'appeler jq
pour générer des erreurs si stdout
n'est pas un terminal
$ curl https://jsonplaceholder.typicode.com/posts/1 | jq > test.txt
jq - commandline JSON processor [version 1.5-1-a5b5cbe]
Usage: jq [options] <jq filter> [file...]
jq is a tool for processing JSON inputs, applying the
given filter to its JSON text inputs and producing the
[...]
Essayez jq '.'
(c'est-à-dire: imprimez en beauté le JSON d'entrée):
$ curl https://jsonplaceholder.typicode.com/posts/1 | jq '.' > test.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 292 100 292 0 0 1698 0 --:--:-- --:--:-- --:--:-- 1707
Notez que le filtre n'est pas vraiment optionnel:
De man jq
:
JQ(1) JQ(1)
NAME
jq - Command-line JSON processor
SYNOPSIS
jq [options...] filter [files...]
Selon la pointe de la branche principale ... votre comportement décrit (et mon comportement observé) n'est pas attendu ...
Les anciennes versions de jq
ont les caractéristiques suivantes: ( ici )
if (!program && isatty(STDOUT_FILENO) && !isatty(STDIN_FILENO))
program = ".";
c'est-à-dire: utilisez un filtre par défaut si stdout
est un TTY et que stdin
n'est pas un TTY.
Ce comportement semble être corrigé dans commit 5fe05367 , avec l'extrait de code suivant:
if (!program && (!isatty(STDOUT_FILENO) || !isatty(STDIN_FILENO)))
program = ".";
Mon incantation:
> cat config.json
{
"ProgramSettings":
{
"version": "1.0"
},
"ProgramSecrets":
{
"AWS_ACCESS_KEY_ID": "",
"AWS_SECRET_ACCESS_KEY": ""
}
}
supposons que vous souhaitiez supprimer l'objet 'ProgramSecrets' du fichier JSON:
> echo $(cat config.json | jq 'del(.ProgramSecrest)') > config.json
> cat config.json
{ "ProgramSettings": { "version": "1.0" } }