Làm cách nào tôi có thể truyền dữ liệu đến một chương trình dự kiến ​​đọc dữ liệu từ một tệp được đưa ra làm đối số?


17

Tôi có một tệp nén lớn và tôi muốn có một chương trình (nhập 4 lần trong trường hợp này) để đọc nó. Trước tiên, phải mất rất nhiều thời gian để giải nén tệp và sau đó gọi chương trình với đường dẫn đến tệp làm đối số. Có thể làm một cái gì đó như:

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

SOME-MAGIC giống như một đường dẫn đến một tệp trừu tượng có chứa stdin?

Sự thay thế tiêu tốn dung lượng đĩa chậm hơn và nhiều hơn mà tôi phải làm khác là:

zcat huge.gz > huger
4s-import huger

Câu trả lời:


32

Bạn có thể sử dụng toán tử thay thế quá trình <()của bash(hoặc zsh):

4s-import <(zcat huge.gz)

Toán tử này sẽ tạo một fifo tạm thời /dev/fd/NNvà thay thế <(.)bằng chuỗi /dev/fd/NN. 4s-importbây giờ có thể mở /dev/fd/NNvà đọc từ fifo đó, trong khi bashsẽ chạy zcat huge.gz, sẽ gửi đầu ra của nó tới /dev/fd/NN.


17
  1. Nhiều chương trình có một -đầu vào tiêu chuẩn. Nếu là của bạn, hãy sử dụng nó như là "dựng sẵn".

  2. Bạn cũng có thể thử sử dụng /dev/stdinhoặc /dev/fd/0như một tập tin.

  3. Tùy chọn thứ ba là sử dụng mkfifođể tạo một tập tin đặc biệt fifo. Trong một shell bạn chuyển dữ liệu của mình (ví dụ gunzip > your_fifo_file:), trong khi trong vỏ khác, bạn gọi chương trình của mình với fifo là tệp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.