Linux: Как отследить стандартный вывод процесса до конца, но остановить и вернуть ненулевой код, если появляется определенная строка? - PullRequest
0 голосов
/ 19 сентября 2019

У нас есть инструмент, который запускает тесты, но возвращает код ошибки, если они не пройдут.
Инструмент запускает тесты после запуска входа в систему через SSH на пользовательскую консоль (не bash) и выдачи команды.Все тесты выполняются одновременно в пределах этого вызова. Регистрация тестов идет в файл.Результат работы инструмента примерно такой:

test1 [ok]
test2 Some message based on the failure
...

Чтобы остановить сборку, нам нужно найти определенные строки в выводе.
Вывод появляется при запуске тестов.

Я мог бы захватить весь вывод в файл и потерпеть неудачу в конце.Но это сэкономит довольно много времени на неудачу после первого теста.

Поэтому я хотел бы что-то вроде tee, но он также убил бы выполнение, если обнаружит эту строку ошибки.Или, по крайней мере, он должен печатать вывод, как он есть, и возвращать ненулевое значение, если найдена строка.

Это выполнимо с помощью стандартного инструментария Linux?

1 Ответ

0 голосов
/ 19 сентября 2019

Единственное решение, которое я могу придумать:

  1. Запустить сборку процесса и cat вывод его в выходной файл.
  2. Запуск другогоскрипт, который отслеживает этот файл: цикл, который повторяет каждые X секунд в поиске, скажем, запрещенных слов в файле.Как только они появятся, убейте процесс build (вам может понадобиться способ идентифицировать ваш процесс сборки, такой как файл pid или что-то вроде этого) и очистить файл.

Вы даже можете поместить эти 2 процесса в один скрипт и заставить их запускаться и останавливаться при необходимости.

...