Получение статуса завершения вложенной команды внутри перенаправления, прикрепленного к тройнику - PullRequest
0 голосов
/ 24 октября 2018

У меня есть эта команда:

coverage report | tee >(grep TOTAL | awk '{exit (int($4) >= 75)?0:1}') && (exit ${PIPESTATUS[0]})

, которая сообщает о покрытии кода, а затем печатает вывод в stdout и перенаправляет этот же вывод в grep + awk, который в основном проверяет, покрывает ли покрытие кодаменьше или больше 75.Наконец, в подоболочке есть exit, которую я притворяюсь использовать в моем конвейере CI / CD.

Проблема в том, что мой CI / CD всегда завершается успешно, что не должно происходить в коде.в моих тестах охват составляет менее 75%.Это означает, что PIEPSTATUS не возвращает то, что я ожидаю вернуть (код awk exit).

В чем проблема?Что я делаю не так?

1 Ответ

0 голосов
/ 24 октября 2018

Состояние выхода

command | tee >(...)

будет состоянием выхода tee, независимо от того, что происходит внутри процесса замены >(...).Вот почему ваш код не работает.

Вы можете достичь своей цели, не используя подстановку процессов, например:

coverage report | awk '{print} /TOTAL/ { pcnt=$4 } END {exit (int(pcnt) >= 75) ? 0 : 1}')
  • {print} печатает все строки
  • /TOTAL/ ... захватывает процент и сохраняет его в pcnt
  • END ... при выходе из кода на основе pcnt

. Это не только распечатает всестрок, излучаемых coverage report, это также гарантирует, что код завершения конвейера отражает логику процента покрытия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...