Очень интересно...
docker run -d ubuntu:latest sleep infinity
$ docker exec -i sharp_einstein sh -c 'echo {\"a\":\"b\",\"c\":\"d\"}' | jq { "a": "b", "c": "d" }
$ docker exec -it sharp_einstein sh -c 'echo {\"a\":\"b\",\"c\":\"d\"}' | jq { "a": "b", "c": "d" }
$ docker exec -i -t sharp_einstein sh -c 'echo {\"a\":\"b\",\"c\":\"d\"}' | jq { "a": "b", "c": "d" }
Разделяя -i
и -t
позволяя появиться проблеме ... (возможно, ошибка?)
Глядя на справочную страницу для docker exec
:
-t, --tty=true|false Allocate a pseudo-TTY. The default is false.
Псевдо-TTY (PTY) позволяют системе взаимодействовать с вами (человеком) ... В результате докер выделяет новый PTY на время exec
(внутри контейнера) и такие вещи, как создание новой строки, высота и ширина терминала входят в игру - наряду с грузом других вещей.
Я не могу полностью объяснить это, но это не то, что вы хотите от чего-то, что подается в трубопровод.
Сравните также:
$ docker exec -i sharp_einstein sh -c 'stty' stty: 'standard input': Inappropriate ioctl for device
$ docker exec -i -t sharp_einstein sh -c 'stty' speed 38400 baud; line = 0; -brkint -imaxbel
$ stty speed 38400 baud; line = 0; -brkint -imaxbel
stty
способен контролировать обработку PTY возвратов каретки и новых строк, хотя эти параметры для меня здесь не имели никакого эффекта. Со страницы руководства:
* [-]ocrnl translate carriage return to newline * [-]onlcr translate newline to carriage return-newline
Существуют аналогичные наблюдения sst -t
, например, со ступеньками при использовании pty (через ssh) и более