Распечатайте вывод в реальном времени и сохраните его в переменной одновременно - PullRequest
0 голосов
/ 04 ноября 2018

Я знаю, что могу сохранить вывод в переменную и , затем распечатать его:

VAR=$(command)
echo "$VAR"

Но у этого есть ряд недостатков:

  • Я не буду видеть ход выполнения команды.
    • В частности, все выходные данные stdout будут видны после всех выходных данных stderr, что затруднит их сопоставление.
  • Так как это приведет к отсутствию вывода на время работы команды, в некоторых средах (например, Travis CI) это завершит работу, если команда будет работать достаточно долго.

Итак, как мне сохранить вывод, а также увидеть его вживую на консоли?

  • Портативные решения предпочтительнее, хотя в Linux / MacOS-а они подойдут в крайнем случае.
  • Решение не должно иметь нежелательных побочных эффектов в режиме errexit

1 Ответ

0 голосов
/ 04 ноября 2018

Сверху моей головы, можно tee выводить в дополнительный дескриптор файла, установленный в исходный стандартный вывод:

exec 3>&1
VAR=$(command | tee /dev/fd/3)

Необходимо установить set -o pipefail для обнаружения ошибки command в режиме errexit.

...