ฉันจะสตรีมข้อมูลไปยังโปรแกรมที่คาดว่าจะอ่านข้อมูลจากไฟล์ที่กำหนดเป็นอาร์กิวเมนต์ได้อย่างไร


17

ฉันมีไฟล์ gzipped ขนาดใหญ่และฉันต้องการโปรแกรม (4s-import ในกรณีนี้) เพื่ออ่าน ใช้เวลาในการคลายไฟล์ก่อนแล้วจึงเรียกโปรแกรมที่มีพา ธ ไปยังไฟล์เป็นอาร์กิวเมนต์ เป็นไปได้ไหมที่จะทำสิ่งที่ชอบ

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และแทนที่ด้วยสตริง<(.) ขณะนี้สามารถเปิดและอ่านจาก FIFO ว่าในขณะที่จะทำงานซึ่งจะส่งผลผลิตของตนไป/dev/fd/NN4s-import/dev/fd/NNbashzcat huge.gz/dev/fd/NN


17
  1. หลายโปรแกรมมี-อินพุตมาตรฐาน หากคุณทำเช่นนั้นให้ใช้สิ่งนี้เพราะเป็น "builtin"

  2. คุณสามารถลองใช้/dev/stdinหรือ/dev/fd/0เป็นไฟล์ได้

  3. ตัวเลือกที่สามคือการใช้mkfifoเพื่อสร้างไฟล์พิเศษ fifo ในเชลล์หนึ่งคุณไพพ์ในข้อมูลของคุณ (เช่น. gunzip > your_fifo_file) ในขณะที่อีกอันหนึ่งคุณเรียกโปรแกรมของคุณโดยใช้ไฟล์ Fifo เป็นไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.