Bağımsız değişken olarak verilen bir dosyadan veri okumayı bekleyen bir programa nasıl veri akışı yapabilirim?


17

Büyük bir gzip dosyası var ve okumak için bir program (bu durumda 4s-import) istiyorum. Önce dosyayı açmak ve daha sonra argüman olarak dosyanın yolu olan programı çağırmak çok zaman alır. Gibi bir şey yapmak mümkün olur mu:

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

SOME-MAGIC, stdin içeren soyut bir dosyaya giden yol gibidir?

Başka türlü yapmak zorunda çok daha yavaş ve daha fazla disk alanı tüketen alternatif:

zcat huge.gz > huger
4s-import huger

Yanıtlar:


32

Sen süreç ikamesi operatörünü kullanabilirsiniz <()ait bash(veya zsh):

4s-import <(zcat huge.gz)

Bu operatör geçici bir fifo oluşturur /dev/fd/NNve bunun yerine <(.)dize kullanır /dev/fd/NN. 4s-importşimdi açabilir /dev/fd/NNve süre, bu fifo'ya okunan bashçalışacak zcat huge.gzetmek çıkışını gönderdiği, /dev/fd/NN.


17
  1. Birçok programın -standart girişi vardır. Sizinkini yaparsa, bunu "yerleşik" olarak kullanın.

  2. Dosyayı /dev/stdinveya /dev/fd/0olarak kullanmayı da deneyebilirsiniz .

  3. Üçüncü seçenek, mkfifofifo özel dosyası oluşturmak için kullanmaktır . Bir kabukta verilerinizi (örn. gunzip > your_fifo_file) Birleştirirken, diğerinde programınızı dosya olarak fifo ile çağırırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.