Shell
可以緩衝標準輸入或文件的程序
除了使用臨時文件來提供幫助之外,是否有一種方法/程序可以緩衝輸入
stdin
但不輸出內容,直到獲得EOF
. 我也不想使用 shell 變數(例如buffer=$(cat)
)。該程序應如下所示(假設程序名稱為
buffered-cat
):$ buffered-cat line 1 line 2 line 3 ^D # Ctr-D here(End of Line)
現在程序收到了
^D
,buffered-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
您可以使用
sponge
from moreutils執行此操作。sponge
將“吸收標準輸入並寫入文件”。沒有參數,該文件是標準輸出。給這個命令的輸入儲存在記憶體中,直到 EOF,然後一次全部寫出。要寫入普通文件,您只需給出文件名:
cmd | sponge filename
的主要目的
sponge
是允許在管道中讀取和寫入同一文件,但它也可以執行您想要的操作。