Запустите сценарий с TTY:
... ssh -q -tt $connection <<ENDSSH
sqlplus -s "user/pass@con" <<EOF
set heading off
select * from ...
EOF
ENDSSH
(обратите внимание, что -T
заменен на -tt
)
Таким образом, литеральный ввод — это:
$ output='{
> "test": "Hello
> There!"
> }'
$ echo "$output" | jq -r ".test"
parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 3, column 7
JSON не содержит многострочных -строк. Поэтому, если вы получаете это буквальное значение из API, это ошибка API, и должна быть исправлена на стороне сервера.
Поскольку вы говорите, что API на самом деле возвращает что-то вроде {"test": "Hello\nThere!"}
, проблема должна быть с вашими командами, потому что это работает с jq 1.5 в Bash 4.4.23:
$ output='{"test": "Hello\nThere!"}'
$ echo "$output" | jq -r ".test"
Hello
There!
eval
(, что является злом ), echo -e
и другие специальные команды могут привести к декодированию экранированных символов. Попробуйте вместо этого использовать printf '%s' "$output"
. Для отладки этого потребуется дополнительная информация о вашей среде.