Shell
來自 moreutils 的海綿 - 外殼重定向有什麼區別?有用的例子?
> brew install moreutils ==> Downloading https://homebrew.bintray.com/bottles/moreutils-0.55.yosemite.bottle.tar.gz ######################################################################## 100.0% ==> Pouring moreutils0.55.yosemite.bottle.tar.gz 🍺 /usr/local/Cellar/moreutils/0.55: 67 files, 740K
海綿讀取標準輸入並將其寫入指定文件。與 shell 重定向不同,海綿在寫入輸出文件之前會吸收其所有輸入。這允許建構讀取和寫入同一文件的管道。
我不明白。請給我一些有用的例子。
浸泡是什麼意思?
假設您有一個名為 的文件
input
,您想刪除所有以 in 開頭的#
行input
。您可以讓所有行不以#
使用開頭:grep -v '^#' input
但是你如何改變
input
?使用標準 POSIX 工具箱,您需要使用一個臨時文件,例如:grep -v '^#' input >/tmp/input.tmp mv /tmp/input.tmp ./input
使用外殼重定向:
grep -v '^#' input >input
input
在您閱讀之前會被截斷。使用
sponge
,您可以:grep -v '^#' input | sponge input
moreutils首頁本身記錄了一個典型的案例:
sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd
在這裡,/etc/passwd 正在被寫入和讀取,並且正在被修改。如果在寫入之前不使用標準輸入,/etc/passwd 可能會損壞(因為文件在讀取期間發生了更改)。