Ответ 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 = ".";