Shell

可以緩衝標準輸入或文件的程序

  • March 22, 2021

除了使用臨時文件來提供幫助之外,是否有一種方法/程序可以緩衝輸入stdin但不輸出內容,直到獲得EOF. 我也不想使用 shell 變數(例如buffer=$(cat))。

該程序應如下所示(假設程序名稱為buffered-cat):

$ buffered-cat
line 1
line 2
line 3
^D # Ctr-D here(End of Line)

現在程序收到了^Dbuffered-cat輸出內容

line 1
line 2
line 3

一個窮人正在sponge使用awk

awk '{a[NR] = $0} END {for (i = 1; i <= NR; i++) print a[i]}'

如果你有tac,你也可以濫用它:

... | tac | tac

您可以使用spongefrom moreutils執行此操作。sponge將“吸收標準輸入並寫入文件”。沒有參數,該文件是標準輸出。給這個命令的輸入儲存在記憶體中,直到 EOF,然後一次全部寫出。

要寫入普通文件,您只需給出文件名:

cmd | sponge filename

的主要目的sponge是允許在管道中讀取和寫入同一文件,但它也可以執行您想要的操作。

引用自:https://unix.stackexchange.com/questions/337055