Установите время ожидания, например,. 1000000 (10 секунд )-, затем ffmpeg завершит работу, если не получит никаких данных в течение 10 секунд. Тогда вы можете, например. запустить ffmpeg в цикле.
Нет, оболочка не может этого сделать. Канал — это просто поток от источника к получателю, обычно в разных процессах.
Давайте посмотрим на ваш первый пример:
cat mypemfile.crt |
(openssl x509 -noout -text | fgrep Subject:)
Вы хотите, чтобы входной файл был разбит вдоль строк, содержащих BEGIN и END, но cat
не заботится о содержимом, и каналы в любом случае не имеют индикации выхода за пределы разделителей записей.
Этого можно было бы добиться с помощью определенных соглашений об источнике и назначении канала, но это устранило бы главное преимущество канала, состоящее в возможности комбинировать программы в качестве строительных блоков для задач, которые не были предусмотрены их авторами.
В этом конкретном примере было бы намного проще изменить openssl
для обработки нескольких сертификатов в одном потоке, чем изменить openssl
для обработки нескольких потоков И изменить cat
для предоставления этих нескольких потоков.
С помощью GNU Parallel:
cat mypemfile.crt |
parallel --pipe -N1 --recstart '-----BEGIN' 'openssl x509 -noout -text | fgrep Subject:'
Не проверено:
sudo docker ps | awk '{print $1}' |
sudo parallel -j0 --lb docker logs -t -f {}
sudo docker ps | awk '{print $1}' |
sudo parallel -j0 --tag --lb docker logs -t -f {}