Рассмотрим массив сжатых файлов.
array=(a.jpg.gz b.jpg.gz c.jpg.gz)
Несжатые данные необходимо передать в приложение без использования временных файлов или хлопот именованных каналов.
Если каждый сжатый поток может быть передан простой конкатенацией к предыдущему, тогда задача проста, но некоторые вызовы приложения требуют, чтобы отдельные файлы передавались как отдельные аргументы.
Например, это приложение, естественно, обрабатывает три различных несжатых файла:
convert a.jpg b.jpg c.jpg output.jpg
Как можно получить эквивалентную функциональность, используя массив сжатых файлов? Обратите внимание, что размер, а также содержимое массива является динамическим c.
Можно попробовать:
convert $(for a in ${array[@]}; do echo <(gunzip -c < $a); done) output.jpg
Затем появится сообщение, в зависимости от приложения. , аналогично:
/dev/fd/63: No such file or directory
Могут быть рассмотрены некоторые уродливые альтернативы:
$SHELL -c "convert $(for a in ${array[@]}; do echo -n \<\(gunzip -c < $a\)\ ; done) output.jpg"
Доступно ли лучшее решение?