Sehr interessant...
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" }
Trennen Sie das -i
und -t
lassen Sie die Ausgabe erscheinen ... (möglicherweise ein Fehler?)
Auf der Manpage nach docker exec
:
-t, --tty=true|false Allocate a pseudo-TTY. The default is false.
Pseudo-TTYs (PTYs) ermöglichen dem System die Interaktion mit Ihnen (einem Menschen) ... Das Ergebnis ist, dass Andock einen neuen PTY für die Dauer des exec
Containers (innerhalb des Containers) zuordnet, und zum Beispiel, wie eine Zeilenschaltung erstellt wird Höhe und Breite der Klemmen kommen ins Spiel - neben vielen anderen Dingen.
Ich kann es nicht ganz erklären, aber es ist nicht das, was Sie von etwas erwarten, das in eine Pipeline einfließt.
Vergleichen Sie auch:
$ 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
ist in der Lage, die Handhabung von Wagenrückläufen und Zeilenumbrüchen durch den PTY zu steuern, obwohl diese Optionen hier für mich keine Auswirkung hatten. Aus der Manpage:
* [-]ocrnl translate carriage return to newline * [-]onlcr translate newline to carriage return-newline
Ähnliche Beobachtungen gibt es sst -t
zum Beispiel: Treppenstufen bei Verwendung eines pty (durch ssh) und Paspeln zu mehr