我一直在尋找解決寫入一系列連接到stdout的非常大的流的問題,然後再次從stdin中讀取這些流,將流拆分成它們的原始部分。我面臨的限制是,我無法在磁盤上創建任何臨時文件。連接到標準輸出,然後在標準輸入分割 - 這可能嗎?
我試着使用unxz --singe-stream選項,但是這並沒有我期待的效果。
爲了證明什麼,我想實現的,我有兩個腳本:
[email protected]:~# cat test-source.sh
#!/bin/bash
echo "one" | xz
echo "two" | xz
echo "three" | xz
然後將以上第一個腳本管道成旨在扭轉效果,第二腳本:
[email protected]:~# cat test-sink.sh
#!/bin/bash
unxz --single-stream
unxz --single-stream
unxz --single-stream
以上腳本預計輸出以下內容:
one
two
three
而是我看到以下內容:
[email protected]:~# ./test-source.sh | ./test-sink.sh
one
unxz: (stdin): File format not recognized
unxz: (stdin): File format not recognized
上述xz只是我試過的一個選項,我願意接受其他建議。 gzip想立刻解壓整個流,我需要保留流之間的界限。
據我所知,焦油不好,因爲它不能接受一個流從標準輸入焦油。
有沒有其他工具可以用來編寫腳本?
這不是我尋找的行爲不,因此錯誤「unxz:(stdin):文件格式無法識別」。 我需要在最後發生的事情是,在源端將三個獨立的流合併在一起,必須在sink端被解複用爲三個獨立的流,在那裏它們可以通過命令進行處理。 現在發生的情況是,第一次調用unxz會正確處理第一個流,然後吞下第二個和第三個流,導致數據被傳遞到錯誤的地方。 –
這似乎正好實現了您在輸出方面描述的內容,並且我在該答案中解釋了該錯誤消息的原因。你能否闡述(在你的問題中,理想情況下)你想要的行爲與這裏提出的行爲有什麼不同? – larsks
我收到的錯誤信息很好理解,我將它們包含的原因是爲了證明我看到的不良行爲。 正如原始問題所述,我正在尋求解決寫入一系列連接到標準輸出的非常大的流,然後再次從標準輸入讀取這些流,將流分成它們的原始部分的問題。 –