Весь конвейер останавливается при очистке флэш-накопителя USB.

Чтобы избежать создания временных файлов или влияния на права доступа, владельца или другие атрибуты файлов, с помощью ksh93 :

for f in file{2}([0-9]); do
  tail -n +11 < "$f" 1<>; "$f"
done

Оператор перенаправления <>; действует как <> (открыть в режиме чтения + записи), за исключением того, что оболочка обрезает файл после успешного завершения команды в том месте, где команда оставила его.

Итак, мы фактически перезаписываем файл поверх самого себя.

3
11.10.2016, 14:52
1 ответ

Поскольку pv - это просто инструмент мониторинга, я предполагаю, что это однопоточная программа, использующая синхронный ввод-вывод. Учитывая, что вход и выход работают с разной скоростью, она будет заполнять и опустошать свой буфер, чтобы предотвратить дросселирование, но если один из каналов полностью заглохнет (в вашем случае это split, не принимающий вход), второй экземпляр pv точно так же заглохнет на вызове write. Затем gzip попытается вывести больше данных, переполнит буфер трубы и тоже заглохнет, и так далее, пока не заглохнет весь конвейер.

Попробуйте использовать buffer вместо pv и посмотрите, поможет ли это. buffer порождает два процесса (один для ввода и один для вывода), и должен поддерживать работу конвейера, даже если вывод полностью остановлен.

3
27.01.2020, 21:22

Теги

Похожие вопросы