Как стать автором
Обновить

Комментарии 2

Мы сталкивались с таким поведением, когда надо было обеспечить семплирование tsv.gz файлов. То есть надо было вычитать из файла N строк, что в принципе решается при помощи zcat | head -N | gzip конвейера. И понятно, что нет никакого смысла команде head дочитывать вход до конца.
Но и команде zcat тоже надо понимать когда ей надо закончить работу. Тот же SIGPIPE можно и проигнорировать разными способами. Тут наиболее правильным решением, наверное, окажется не попытки организации нестандартных конвейеров, а всё ж создание элементов конвейера более подходящих для задачи. Например, сделать команду аналогичную zcat, но умеющую семплировать данные.
PS. Параллелизация в bash возможна как минимум 3 разными способами и, на мой взгляд, bash совсем не подходит для столь сложных задач, потому что даже проконтролировать все коды выхода не всегда возможно…
Добавлю, почему нельзя просто так игнорировать ошибку выполнения первой команды. Дело в том, что мы хотим заигнорировать один конкретный вид ошибки — ошибку записи в закрытый пайп. Но ведь причин, почему команда отвалилась может быть множество: segmentation fault, ошибка чтения диска, ошибка в читаемых данных, отсутствие файла для чтения, неверное окружение на сервере, отсутствие какого-нибудь модуля. Ведь мы не хотим игнорировать вообще всё это?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий