Запись вывода в файл после передачи в jq

Как я могу записать вывод по jq который прошел через jq в файл в оболочке

Пример:

curl api.example.com | jq > call.txt

не сработает Ни один не делает

(curl api.example.com | jq) > call.txt

Помогите!

Изменение: Так что curl api.example.com > call.txt работает просто отлично. Так что это связано с передачей его в JQ

Ответ 1

Просто вызов jq без фильтра вызовет ошибки, если stdout не является терминалом

$ 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
[...]

Попробуйте jq '.' (то есть: Pretty-распечатать входной JSON):

$ 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

Обратите внимание, что фильтр не является обязательным:

От man jq:

JQ(1)                                                                                JQ(1)

NAME
       jq - Command-line JSON processor

SYNOPSIS
       jq [options...] filter [files...]

По совету мастера ветки... вашего описанного (и моего наблюдаемого) поведения не предвидится...

Более старые версии jq имеют следующее: (здесь)

if (!program && isatty(STDOUT_FILENO) && !isatty(STDIN_FILENO))
  program = ".";

то есть: использовать фильтр по умолчанию, если stdout является TTY, а stdin не является TTY.

Это поведение исправлено в коммите 5fe05367 со следующим фрагментом кода:

if (!program && (!isatty(STDOUT_FILENO) || !isatty(STDIN_FILENO)))
  program = ".";

Ответ 2

Мое заклинание:

$ cat config.json

{
    "ProgramSettings":
    {
        "version": "1.0"
    },
    "ProgramSecrets":
    {
        "AWS_ACCESS_KEY_ID": "",
        "AWS_SECRET_ACCESS_KEY": ""
    }
}

Предположим, вы хотите удалить объект 'ProgramSecrets' из файла JSON:

$ echo $(cat config.json | jq 'del(.ProgramSecrest)') > config.json
$ cat config.json
{ "ProgramSettings": { "version": "1.0" } }