Как я могу остановить обработку файла и перейти к следующему в трубе? - PullRequest
1 голос
/ 18 марта 2020

Я хочу обработать все файлы в каталоге в течение l oop, и у меня есть несколько сценариев, которые отправляют данные друг другу через каналы. Когда один из сценариев завершается ошибкой в ​​файле, я хотел бы немедленно прекратить обработку этого файла и продолжить работу со следующим файлом. Что-то вроде

#!/bin/bash

for file in *; do
  script1 < $file |\
  script2 |\
  ( script2_failed && continue || cat ) |\
  script3 > $file.out
done

Можно ли что-то подобное сделать?

1 Ответ

0 голосов
/ 18 марта 2020

Вы можете перехватить сигнал ERR и continue для следующей итерации. Например:

trap continue ERR
for cmd in date xyz date; do
    $cmd 2>/dev/null
    echo test
done

вывод:

Tue 17 Mar 2020 03:23:24 PM MDT
test
Tue 17 Mar 2020 03:23:24 PM MDT
test

xyz завершается с ошибкой command not found и вызывает continue, которая запускает следующую итерацию. Подробнее о встроенных командах continue и trap см. help continue и help trap.

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