вывод запуска докера выходит из строя - PullRequest
0 голосов
/ 01 ноября 2019

Я пойду прямо к примеру:

docker run --rm -i alpine /bin/sh -vs <<EOF
echo BEFORE
cat /etc/*elease
echo AFTER
EOF

Вывод:

echo BEFORE
cat /etc/*elease
echo AFTER
BEFORE
3.9.3
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.9.3
PRETTY_NAME="Alpine Linux v3.9"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
AFTER

Обратите внимание, что сами команды (например, echo BEFORE), напечатанные sh -v, появляются перед любойвывод команды (например, BEFORE).

Я ожидаю увидеть

echo BEFORE
BEFORE
cat /etc/*elease
3.9.3
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.9.3
PRETTY_NAME="Alpine Linux v3.9"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
echo AFTER
AFTER

Я пытался использовать stdbuf и script, как, например, описано здесь , но безрезультатно.

Не думаю, что я единственный, у кого есть эта проблема. Вот мне и интересно

  • В чем причина такого перепутанного выхода?
  • Есть ли способ это исправить?

1 Ответ

0 голосов
/ 01 ноября 2019

Мне удалось решить эту проблему, перенаправив стандартный вывод на stderr:

docker run --rm -i alpine /bin/sh -vs <<EOF
exec 1>&2
echo BEFORE
cat /etc/*elease
echo AFTER
EOF
...