Як я можу передавати дані програмі, яка очікує на зчитування даних із файлу, який подано як аргумент?


17

У мене величезний gzipped файл, і я хочу, щоб програма (4-імпорт в цьому випадку) прочитала його. Спочатку потрібно розпакувати файл, а потім викликати програму зі шляху до файлу як аргумент. Чи можна було б зробити щось на кшталт:

zcat huge.gz | 4s-import <SOME MAGIC>

де SOME-MAGIC - це як шлях до абстрактного файлу, що містить stdin?

Альтернативою, що мені доводиться робити, набагато повільніше і забирає дисковий простір, що мені доводиться робити:

zcat huge.gz > huger
4s-import huger

Відповіді:


32

Ви можете використовувати оператор підстановки <()процесу bash(або zsh):

4s-import <(zcat huge.gz)

Цей оператор створить тимчасовий FIFO /dev/fd/NNі замінить <(.)рядок /dev/fd/NN. 4s-importтепер може відкривати /dev/fd/NNі читати з цього файлу, поки він bashбуде працювати zcat huge.gz, який надсилає свій вихід на /dev/fd/NN.


17
  1. Багато програм мають -стандартний вхід. Якщо це так, використовуйте це як "вбудований".

  2. Ви також можете спробувати використовувати /dev/stdinабо /dev/fd/0як файл.

  3. Третій варіант - використовувати mkfifoдля створення спеціального файлу fifo. В одній оболонці ви передаєте свої дані (напр. gunzip > your_fifo_file), А в іншій ви називаєте програму разом з файлом fifo як файл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.